“show”页面未显示正确数据的属性

时间:2015-07-29 19:02:19

标签: html ruby-on-rails

我正在使用ror建立一个网站,我有一个同人圈的列表,我想显示不同的图片并为那个粉丝写作。现在,只是为了测试,我只是在页面顶部显示粉丝的名字,但不管我点击哪一个,它只显示第一个粉丝的名字。这是我认为相关的文件的部分,但如果你需要看到更多,我会发布它。

routes.rb的部分:

get 'fandoms' => 'fandoms#index'
get 'fandoms/new' => 'fandoms#new'
post 'fandoms' => 'fandoms#create'
get 'fandoms/:id' => 'fandoms#show', as: :fandom
resources :fandoms

fandoms_controller中的show方法:

def show
    @fandom = Fandom.find_by(params[:id])
end

fandoms的index.html.erb:

<div class="main">
<div class="container">
<h2>Fandoms</h2>
  <%= link_to "New Fandom (dev only)", "fandoms/new" %>
  <% @fandoms.each do |fandom| %>
  <div class="fandoms">
    <%= link_to fandom.name, fandom_path(fandom) %>
  </div>
  <% end %>
</div>

最后是粉丝的show.html.erb:

<div class="main">
  <div class="container">
  <h2>Fandoms</h2>
      <div class="fandom">
        <h1><%= @fandom.name %></h1>
      </div>
  </div>
</div>

我用codecademy上的Ror教程仔细检查了我的代码,但是我仍然找不到我想要做的任何差异。

感谢。

1 个答案:

答案 0 :(得分:2)

您的$ swiftly --auth-url="https://identity.api.rackspacecloud.com/v2.0" \ --auth-user="{username}" --auth-key="{api_key}" --region="DFW" \ --concurrency=10 put container_name -i images/ 动作有一个微妙的拼写错误,打破了您的逻辑:

show

实际应该是:

@fandom = Fandom.find_by(params[:id])

不同之处在于,@fandom = Fandom.find(params[:id]) 将返回满足条件的第一行。你实际上没有通过任何条件;只是一个ID,在Postgres中甚至不起作用:

find_by

您的数据库更宽松,但似乎只是将其视为irb> Fandom.find_by(1) PG::DatatypeMismatch: ERROR: argument of WHERE must be type boolean, not type integer LINE 1: SELECT "fandoms".* FROM "fandoms" WHERE (1) LIMIT 1 子句,因此每一行都符合条件。因此,它每次都返回第一行。使用WHERE TRUE可以获得所需的结果。