【发布时间】:2014-03-04 08:06:52
【问题描述】:
我有 2 个模型通过连接表相互关联:
class Book < ActiveRecord::Base
has_many :reviews
end
class Reader < ActiveRecord::Base
has_many :reviews
end
class Reviews < ActiveRecord::Base
belongs_to :reader
belongs_to :book
end
现在,我可以更新路线上的评论(我在控制台中手动创建的):
readers/:id/books
上面的路由是使用rails的成员方法创建的:
resources :readers
member do
get 'books'
end
end
评论控制器中的更新操作(reviews#update)定义如下:
def update
@reader = current_reader
@review = Review.find_by_reader_id(@reader.id)
@book = Book.find(params[:review][:book]
if @reader.books.include?(@book)
@review.update_attributes(review_params)
redirect_to (@reader)
else
flash[:error] = 'You can only edit reviews that belong to you'
end
end
我的 form_for 评论 (reviews#update) 如下所示: 读者评论:
<% book.reviews.each do |review| %>
<% if current_reader == (review.reader) %>
<%= review.content %> written by <%= review.reader.name %>
<% if current_reader.reviews.include?(review) %>
<%= form_for ([book, review]) do |f| %>
<div class="field">
<%= f.hidden_field :book, :value => book.id %>
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Update", class: "btn btn-large btn-primary" %>
<% else %>
<%= form_for ([book, review]) do |f| %>
<div class="field">
<%= f.hidden_field :book, :value => book.id %>
<%= f.text_area :content, placeholder: "compose new review" %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
<% end %>
<% end %>
<% end %>
以上适用于更新。但第二种形式没有。
我的意图是检查评论 => 如果有 - 显示一个表格,以便读者可以更新评论;如果没有,则显示一个表格,以便读者可以创建评论。我在评论控制器中有一个私有方法,可以在执行任一操作之前检查以确保读者有书(我猜是 before_action 方法)。
第一个表单(更新表单)运行良好,但第二个不行——表单根本不显示。我尝试了各种方法来显示表单,但没有运气。能否请我确定解决此问题的最佳方法?
非常感谢!
【问题讨论】:
标签: ruby-on-rails forms associations