0

プロパティという名前のモデルと、ネストされたモデル 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 プロジェクトです。何が間違っているのか教えてください。

4

2 に答える 2

1

これは、property_review のルートが定義されていないためです。モデルのスタンドアロン パスを定義するには、次のように記述します。

 resources :property_reviews 

ルートファイルで。

このリンクは、model_name_path ヘルパーについて簡単に説明します。

モデルとネストされたフォーム

于 2012-09-10T19:53:20.787 に答える
0

form_forネストされたモデルでは、ヘルパーで親と子のモデルインスタンス配列を使用する必要があります。

このコードを試してください

<%= form_for [@property, @review] do |r| %>

これがお役に立てば幸いです。

于 2012-09-10T19:01:21.290 に答える