我有两个通过连接表相互关联的模型:
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)中的显示操作定义如下:
def show
@book = book.find[:id]
end主要的想法是:读者必须阅读一本书才能阅读(没有书)。读者不能为书写评论)
在图书展示视图(show.html.erb)中,我可以访问属于这样一本书的评论对象和读者对象:
书评
<% @book.reviews.each do |review| %>
<%= review.content %> written by <%= review.reader.name %>每个人都可以看到一本书的简介,但只有那些已经登录并购买了这本书的人才能评论这本书。我必须为@review对象提供一个form_for助手,它位于我的共享文件夹中(在视图下)。我的form_for助手My @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/ see语句,它检查是否只有已经登录并购买了这本书的读者才能创建/更新一篇评论。它看起来像这样:书评
<% @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?有人能帮我弄清楚如何将我通过访问的审查对象传递给form_for助手进行@评审吗?
非常感谢!
发布于 2014-02-27 04:20:35
您有一个form_for @review,但是您没有在任何地方定义@review。
我要修改这一行:
render 'shared/review_form'若要将当前审查作为局部变量传递到分部:
render 'shared/review_form', review: review然后您可以将review_form更改为form_for review。
https://stackoverflow.com/questions/22058938
复制相似问题