我有2个模型通过连接表相互关联:
class Book < ActiveRecord::Base
has_many :reviews
has_many :readers, through: :libraries
end
class Reader < ActiveRecord::Base
has_many :reviews
has_many :books, through: :reviews
end
class Reviews < ActiveRecord::Base
belongs_to :reader
belongs_to :book
end
评论包含以下列:
书籍控制器(book#show)中的show动作定义如下:
def show
@book = book.find[:id]
end
主要思想是这样的: 读者必须阅读一本书来阅读它(没有书?读者不能写书评论)
在book的show for show(show.html.erb)中,我可以同时访问属于书籍的评论和读者对象:
书评
<% @book.reviews.each do |review| %>
<%= review.content %> written by <%= review.reader.name %>
每个人都可以看到图书的个人资料,但只有登录并购买图书的人才能查看图书。我必须使用@review对象的form_for帮助器,它位于我的共享文件夹中(在视图下)。我的form_for帮助器我的@review对象如下所示:
<%= form_for(review) do |f| %>
<div class="field">
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Update", class: "btn btn-large btn-primary" %>
<% end %>
我的问题是: 我希望读者能够在书籍的个人资料页面(书籍#show)上编辑他们对书籍的评论。我有一个if / else语句,检查是否只有登录并购买了本书的读者才能创建/更新评论。它看起来像这样: 书评
<% @book.reviews.each do |review| %>
<%= review.content %> | written by <%= review.reader.name %>
<% if signed_in? && current_reader?(review.reader) %>
<div class="row">
<aside class="span4">
<section>
<%= render 'shared/review_form', review: review %>
</section>
</aside>
</div>
<% else %>
#Do something else
<% end %>
<%end%>
我收到错误此错误:
undefined method `model_name' for #<Class:0x007fe568871c70>
我认为这是因为上面的错误中的类是书,模型是@review?有人可以帮我弄清楚如何将我通过@book
访问的审核对象传递给@review的form_for帮助器吗?
非常感谢!
答案 0 :(得分:1)
您有一个form_for @review
,但您没有在任何地方定义@review
。
我会改变这一行:
render 'shared/review_form'
将当前评论作为局部变量传递给partial:
render 'shared/review_form', review: review
然后您可以将review_form更改为form_for review
。