0

メールフィールドを空白のままにして新しいGirlレコードを作成しようとすると、このエラーが発生します。
メールフィールドはネストされています。

入力されていない場合は、連絡先レコードを作成せずに、Girlレコードのみを作成したいだけです。
そして、何かでいっぱいになったら、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 に答える