2

私は1:1の関係を持つ設備を備えたモデルを持っています:

  class Listing < ActiveRecord::Base

      attr_accessible :address1, :address2, :bath, :bedroom, :city, :description, :neighborhood, :sleeps, :sqft, :state_id, :title, :zip, :images_attributes, :amenity_attributes

      has_many :images, :dependent => :destroy
      accepts_nested_attributes_for :images, :allow_destroy => true

      has_one :amenity
      accepts_nested_attributes_for :amenity, :allow_destroy => true
   end

およびアメニティテーブル:

class Amenity < ActiveRecord::Base
  attr_accessible :air_conditioning, :balcony

  belongs_to :listing

end

最後に、私の見解:

   <%= simple_nested_form_for (@listing), :html => {:multipart => true} do |f| %>
          <%= f.error_notification %>
          <div class="form-inputs">
            <%= f.input :title %>
            <%= f.input :sleeps %>
            <%= f.input :bath %>
            <%= f.input :bedroom %>
            <%= f.input :sqft %>
            <%= f.input :neighborhood %>
            <%= f.input :address1 %>
            <%= f.input :address2 %>
            <%= f.input :city %>
            <%= f.input :state_id %>
            <%= f.input :zip %>
            <%= f.input :description %>
          </div>

            <!-- amenities -->
            <%= f.fields_for :amenities do |a| %>
                <div class="amenities">
                    <label><%= a.check_box :smoking %> Smoking Allowed</label>
                </div>
            <% end %>
                <!-- end amenities -->
    <!-- Submit button -->
<% end %>

送信を押すと、エラーが発生します。

Can't mass-assign protected attributes: amenities

ここで何が起こっているのか分かりますか?:amenities_attributesタグとaccepts_nestedタグを許可しても送信されません。

4

2 に答える 2

1

has_oneアソシエーションがあるので、アメニティは複数形であってはなりません。

変化する

 <%= f.fields_for :amenity do |a| %>

編集

 <%= f.fields_for :amenity do |a| %>
            <div class="amenities">
                 <%= a.label :smoking, 'Smoking Allowed' %>
                <%= a.check_box :smoking %>
            </div>
         <% end %>
    <p><%= f.submit "Submit" %></p>
     <% end %>

また、このドキュメントで1対1の関連付けを確認してください。http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

于 2012-08-17T16:37:40.197 に答える
0

修理済み:

class Listing < ActiveRecord::Base
  has_one :amenity
  accepts_nested_attributes_for :amenity
  after_initialize do
    self.amenity ||= self.build_amenity()
  end
end
于 2012-08-23T14:23:15.747 に答える