0

当我尝试通过将邮件字段留空来制作新的女孩记录时,我收到了这个错误。
邮件字段是嵌套的。

当它不输入时,我只想让它只制作女孩记录而不创建联系人记录。
当它充满一些东西时,我希望它同时记录 Girl 和 Contact 。
当它更新时,我希望它做同样的事情。
我怎样才能做到这一点???我的代码有什么问题?

我的观点

<%= 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
4

1 回答 1

1

这是最新版本的 rails 可能会出现的问题,因为他们已对其进行了修补。您可以在配置中更改它。有关详细信息,请参阅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
于 2012-07-13T17:52:36.333 回答