2012-07-13 79 views
0

當我嘗試使留下郵件字段爲空的新女孩記錄時,出現此錯誤。
郵件字段是嵌套的。爲什麼我仍然收到錯誤「無法批量分配受保護的屬性:聯繫人」

當它沒有輸入時,我只希望它只創建Girl記錄而不創建聯繫人記錄。
當它充滿了某些東西時,我希望它可以同時記錄女孩和聯繫人。
當它更新時,我希望它做同樣的事情。
我該怎麼做?我的代碼有什麼問題?

我查看

<%= form_for(@girl) do |f| %> 
    <% if @girl.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@girl.errors.count, "error") %> prohibited this girl from being saved:</h2> 

     <ul> 
     <% @girl.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name_en %><br /> 
    <%= f.text_field :name_en %> 
    </div> 
    <div class="field"> 
    <%= f.label :name_ja %><br /> 
    <%= f.text_field :name_ja %> 
    </div> 
    <div class="field"> 
    <%= f.label :gender_id %><br /> 
    <%= f.number_field :gender_id %> 
    </div> 
    <div class="field"> 
    <%= f.label :job_type_id %><br /> 
    <%= f.number_field :job_type_id %> 
    </div> 
    <div class="field"> 
    <%= f.label :age %><br /> 
    <%= f.number_field :age %> 
    </div> 
    <div class="field"> 
    <%= f.fields_for :contacts do |contact| %> 
    <%= f.label :mail %><br /> 
    <%= contact.text_field :mail %> 
    <% end %> 
    </div> 

    <div class="field"> 
    <%= f.label :photo %><br /> 
    <%= f.file_field :photo %> 
    </div> 

    <div class="field"> 
     <%= f.label :tag_list, 'tag' %><br /> 
     <%= f.text_field :tag_list %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我控制器

def new 

    @girl = Girl.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @girl } 
    end 
    end 


    def create 

    @girl = Girl.new(params[:girl]) 

    respond_to do |format| 
     if @girl.save 
     format.html { redirect_to @girl, notice: 'Girl was successfully created.' } 
     format.json { render json: @girl, status: :created, location: @girl } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @girl.errors, status: :unprocessable_entity } 
     end 
    end 
    end 


    def update 

    @girl = Girl.find(params[:id]) 

    respond_to do |format| 
     if @girl.update_attributes(params[:girl]) 
     format.html { redirect_to @girl, notice: 'Girl was successfully updated.' } 
     format.json { head :ok } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @girl.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

女孩模型

class Girl < ActiveRecord::Base 
    has_many :users 
    has_one :contact 
    accepts_nested_attributes_for :contact 
    attr_accessible :id, :name_en, :name_ja, :gender_id, :job_type_id, :age, :contact_attributes, :photo, :tag_list 

    searchable do 
    text :name_en, :name_ja 
    text :contact do 
     contact.mail 
    end 
    end 

    has_attached_file :photo, 
    :styles => { 
     :thumb=> "100x100>", 
     :small => "400x400>" } 

    acts_as_taggable_on :tags 
    acts_as_commentable 


end 

聯繫模型

class Contact < ActiveRecord::Base 
    belongs_to :girl, :class_name => "Girl" 
    accepts_nested_attributes_for :girl 
    attr_accessible :mail 

end 

回答

1

這是使用最新版本的導軌進行修補後可能發生的問題。您可以在配置中更改它。詳細信息請參見http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/

看起來你在使用單數形式時應該使用複數形式。

<div class="field"> 
    <%= f.fields_for :contacts do |contact| %> 
    <%= f.label :mail %><br /> 
    <%= contact.text_field :mail %> 
    <% end %> 
</div> 

應該是:

<div class="field"> 
    <%= f.fields_for :contact do |contact| %> 
    <%= f.label :mail %><br /> 
    <%= contact.text_field :mail %> 
    <% end %> 
</div> 

您需要添加以下到控制器新動作:

@girl.build_contact 
+0

謝謝!我剛剛在創建方法中添加了@ girl.contacts = params [:girl] [:contacts]前面的if @ girl.save。但它仍然表示同樣的錯誤。我還有什麼想念? – MKK 2012-07-13 18:01:09

+0

您需要從參數中刪除聯繫人部分。在'update_attributes'調用之前調用'params [:girl] .delete(:contacts)''。 – Gazler 2012-07-13 18:02:28

+0

如果我把它作爲聯繫人,消息輸入框消失了。如果可以的話,它消失了 – MKK 2012-07-13 18:02:47

相關問題