首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails4:通过对象与另一个对象的关联来创建和编辑对象,并将其编辑为form_for助手

Rails4:通过对象与另一个对象的关联来创建和编辑对象,并将其编辑为form_for助手
EN

Stack Overflow用户
提问于 2014-02-27 04:17:49
回答 1查看 43关注 0票数 0

我有两个通过连接表相互关联的模型:

代码语言:javascript
复制
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

图书控制器(book#show)中的显示操作定义如下:

代码语言:javascript
复制
def show
  @book = book.find[:id]
end

主要的想法是:读者必须阅读一本书才能阅读(没有书)。读者不能为书写评论)

在图书展示视图(show.html.erb)中,我可以访问属于这样一本书的评论对象和读者对象:

书评

代码语言:javascript
复制
<% @book.reviews.each do |review| %>
<%= review.content %> written by <%= review.reader.name %>

每个人都可以看到一本书的简介,但只有那些已经登录并购买了这本书的人才能评论这本书。我必须为@review对象提供一个form_for助手,它位于我的共享文件夹中(在视图下)。我的form_for助手My @review对象如下所示:

代码语言:javascript
复制
<%= 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语句,它检查是否只有已经登录并购买了这本书的读者才能创建/更新一篇评论。它看起来像这样:书评

代码语言:javascript
复制
<% @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%>

我得到一个错误--这个错误:

代码语言:javascript
复制
undefined method `model_name' for #<Class:0x007fe568871c70>

我认为这是因为上面错误中的类是书,而模型是@review?有人能帮我弄清楚如何将我通过访问的审查对象传递给form_for助手进行@评审吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 04:20:35

您有一个form_for @review,但是您没有在任何地方定义@review

我要修改这一行:

代码语言:javascript
复制
render 'shared/review_form'

若要将当前审查作为局部变量传递到分部:

代码语言:javascript
复制
render 'shared/review_form', review: review

然后您可以将review_form更改为form_for review

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22058938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档