我有一个名为property的模型和一个嵌套模型PropertyReviews。我能够使用property和property_reviews呈现单个表单。一个属性可以有多个评论,所以当我想添加另一个评论时,我不想呈现属性的表单,只是为了审查。这是我的代码。
#for fresh property (with review)
def new
@property = Property.new
@property.property_reviews.build
end
以下是物业模型:
class Property < ActiveRecord::Base
has_many :property_reviews, :dependent => :destroy
accepts_nested_attributes_for :property_reviews
end
以下是观点和部分内容:
应用程序/视图/属性/ new.html.erb
<%= render :partial => 'form' %>
应用程序/视图/属性/ _from.html.erb
<%= form_for @property, :html => {multipart: true} do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :address, "Complete Address" %>
<%= f.text_area :address, rows: 3 %>
<%= f.fields_for :property_reviews do |review| %>
<%= render "review_fields", r: review %>
<% end %>
<%= f.submit "Submit", class: "btn btn-large btn-primary" %>
应用程序/视图/属性/ _review_fields.html.erb
<p>
<%= r.label :comments %>
<%= r.text_area :comments, rows: 5 %>
..
..
</p>
直到现在情况还好,因为我通过审核来创建一个新的属性。
现在我想添加一个评论,因为属性地址是固定的,它的控制器代码如下:
# add another review to existing property
def add_new_review
@property = Property.find(params[:id])
@review = @property.property_reviews.build
end
view:app / views / property / add_new_review.html.erb
<b><%= @property.address %></b>
<%= form_for @review do |r| %>
<%= render "review_fields" %>
<%= f.submit "Submit", class: "btn btn-large btn-primary" %>
<% end %>
当我尝试渲染add_new_review页面时,出现以下错误:
undefined method `property_reviews_path' for #<#<Class:0xa2ac3a8>:0xa5e487c>
在线:
<%= form_for @review do |r| %>
这是我的第一个铁轨项目,请让我知道我做错了什么?
答案 0 :(得分:1)
这是因为您没有为property_review定义路由。为了定义模型的独立路径,您应该编写
resources :property_reviews
在路线文件中。
此链接将向您简要介绍model_name_path helper,
答案 1 :(得分:0)
在嵌套模型中,您应该在form_for
帮助器中使用父模型和子模型实例数组。
试试此代码
<%= form_for [@property, @review] do |r| %>
希望这会有所帮助。