【发布时间】:2014-10-14 00:42:24
【问题描述】:
我正在尝试为公司页面创建评论模型。为此,我有:
型号
user.rb
has_many :reviews
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :reviews
end
我的评论控制器是:
def create
@company = Company.find_by_slug(params[:id])
@review = @company.reviews.create(params[:review])
@review.save
redirect_to company_path(@company)
end
我在公司展示页面中有这个代码:
<% @company.reviews.each do |review| %>
<p>
<strong>Title:</strong>
<%= review.title %>
</p>
<p>
<strong>Avantage:</strong>
<%= review.avantage %>
</p>
<p>
<strong>Inconvenient:</strong>
<%= review.inconvenient %>
</p>
<% end %>
</br>
<%= form_for([@company, @company.reviews.build]) do |f| %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :avantage %><br>
<%= f.text_area :avantage %>
</div>
<div class="field">
<%= f.label :inconvenient %><br>
<%= f.text_area :inconvenient %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
但是,当我转到特定公司页面并尝试为该公司创建评论时,我收到此错误消息 undefined method reviewsfor nil:NilClass
【问题讨论】:
-
看看你在叫什么
reviews- 它是零。 -
当我从控制台创建评论时它是 nil 和它的工作原理
-
那么错误在哪一行?它来自控制器中的
@company.reviews吗?如果是这样,那么Company.find_by_slug将返回 nil。 -
是的,你是对的,但我使用 friendly_id 而不是 id,所以我猜像 @company = Company.find(params[:company_id]) 这样的东西不起作用
标签: ruby-on-rails ruby-on-rails-4 associations