При отправке формы с полями для части, как я могу назначить новый идентификатор для модели поля для - PullRequest
1 голос
/ 03 апреля 2011

У меня есть форма, которая обрабатывает 2 модели, ГИБУЛО и Полиза.Вот как я их сейчас настраиваю:

class Vehiculo < ActiveRecord::Base
  has_one :poliza
end

class Poliza < ActiveRecord::Base
  belongs_to :vehiculo
end

Метод создания в ГИБУЛО выглядит следующим образом:

def create
    @vehiculo = Vehiculo.new(params[:vehiculo])
    @polizadeseguro = Polizadeseguro.new(params[:poliza])

respond_to do |format|
  if @vehiculo.save #&& @poliza.save

    format.html { redirect_to(@vehiculo, :notice => 'Vehiculo was successfully created.') }
    format.xml  { render :xml => @vehiculo, :status => :created, :location => @vehiculo }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @vehiculo.errors, :status => :unprocessable_entity }
  end

end

Форма в / vehicleulos / new содержит часть @fields_forс полями из полиза.Когда я отправляю форму, она сохраняет все поля, но не присваивает только что созданный идентификатор из транспортных средств, как VehicleUlo_id в таблице Polizas.После прочтения многих вопросов об этом в Интернете, кажется, что он должен сохранить его «автоматически» на основе отношений на модели.Это правда?Если так, то почему это не работает?Если нет, что мне нужно добавить к методу создания, чтобы я решил это?

Спасибо!

Обновление: после обновления метода create с помощью json в качестве вывода, как предлагается здесь, я получаю:

{
  "utf8"=>"✓",
  "authenticity_token"=>"tEhNC4J17h+KvNgXv1LLkVyufQwU2uAT18P7msQxiqA=",
  "vehiculo"=>{
    "marca_id"=>"2",
    "modelo_id"=>"4",
    "color"=>"Blanco",
    "ano"=>"2011",
    "chassis"=>"123456789",
    "placa"=>"G123456",
    "cliente_id"=>"1",
    "entaller"=>"0",
    "vip"=>"0"
  },
  "poliza"=>{
    "compania"=>"Comp1",
    "numeropoliza"=>"736458",
    "vencimiento(1i)"=>"2011",
    "vencimiento(2i)"=>"9",
    "vencimiento(3i)"=>"21"
  }
}

Это вывод, поэтому, по крайней мере, он получает поля из формы, но не вставляет их в таблицу polizas.

1 Ответ

1 голос
/ 03 апреля 2011

Необходимо убедиться, что ваша родительская модель принимает вложенные атрибуты для дочерней модели:

class Vehiculo < ActiveRecord::Base
  has_one :poliza
  accepts_nested_attributes_for :poliza
end

Если ваша форма настроена правильно, ваша params будет выглядеть примерно так:

params = {
  :vehiculo => {
    :field => "value",
    :another_field => "value",
    :poliza => {
      :poliza_field => "poliza value"
    }
  }
}

Итак, все, что вам нужно в вашем контроллере, это:

def create
  @vehiculo = Vehiculo.new(params[:vehiculo])

  respond_to do |format|
    if @vehiculo.save #&& @poliza.save
      format.html { redirect_to(@vehiculo, :notice => 'Vehiculo was successfully created.') }
      format.xml  { render :xml => @vehiculo, :status => :created, :location => @vehiculo }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @vehiculo.errors, :status => :unprocessable_entity }
    end
  end
end

[Обновление]

Вот что вам нужно иметьвсе это работает.

Как уже упоминалось выше, вам нужно accepts_nested_attributes_for.

Далее убедитесь, что ваше новое действие строит ребенка.

class VehiculosController < ApplicationController
  def new
    @vehiculo = Vehiculo.new
    @vehiculo.build_poliza
  end

  def create
    vehiculo = Vehiculo.new(params[:vehiculo])
    if vehiculo.save
      redirect_to root_path, :notice => "Success"
    else
      redirect_to root_path, :alert => "Failure"
    end
  end
end

Наконец, впо вашему мнению, укажите дочернюю модель, используя fields_for :child_model, например:

<%= form_for @vehiculo do |f| %>
  <p>Whatever Field: <%= f.text_field :whatever %></p>
  <%= f.fields_for :poliza do |p| %>
    <p>Polizo Field: <%= p.text_field :something %></p>
  <% end %>
<% end %>
...