【发布时间】:2014-02-27 04:17:49
【问题描述】:
我有 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
评论有以下列:
- 内容
- reader_id
- book_id
books 控制器(book#show)中的 show 动作定义如下:
def show
@book = book.find[:id]
end
主要思想是这样的: 读者必须读过书才能对其进行评论(没有书?读者不能为书撰写评论)
在 book 的 show (show.html.erb) 视图中,我可以访问属于一本书的 review 和 reader 对象,如下所示:
书评
<% @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 %>
我的问题是: 我希望读者能够在书籍的个人资料页面(book#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 对象 传递给@review 的form_for 助手吗?
非常感谢!
【问题讨论】:
-
@sevenseacat:感谢您的回复。我按照您的建议做了(并在上面编辑了我的问题以反映更改 - 另请注意,我没有重新启动服务器,因为我认为这并不重要,但我可能错了)。我仍然得到同样的错误:#<0x007fe568871c70>0x007fe568871c70>
标签: ruby-on-rails form-for controller-actions