プロパティという名前のモデルと、ネストされたモデル PropertyReviews があります。プロパティと 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>
レビュー付きの新しいプロパティを作成するために new をレンダリングすると、今まではうまくいきました。
プロパティのアドレスが固定されているため、レビューのみを追加したいと思います。そのためのコントローラーコードを以下に示します。
# add another review to existing property
def add_new_review
@property = Property.find(params[:id])
@review = @property.property_reviews.build
end
ビュー: 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| %>
これは私の最初の Rails プロジェクトです。何が間違っているのか教えてください。