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 和 accept_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 %>

此外,请查看此文档以了解一对一关联,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 回答