2

これが私の最初の質問です。あなたが私を助けてくれることを願っています。私は2つのモデルを持っています。

    class Cliente < ActiveRecord::Base
      attr_accessible :cedula, :direccion, :nombres, :telefono
      validates :cedula, :direccion, :nombres, :telefono, :presence => true 
      validates :cedula, :uniqueness => { :message => "Cedula ya en uso" }
      has_many :facturas

    class Factura < ActiveRecord::Base
      attr_accessible :cliente_attributes, :iva, :numero, :subtotal, :total, :created_at
      belongs_to :cliente
      accepts_nested_attributes_for :cliente

facturas#newビューでClienteを作成または編集できるようにしたい。存在する場合は更新し、存在しない場合は作成します。ネストされた属性を使用しています。存在する場合は、JavaScriptを使用してテキストフィールドに入力します。存在しない場合は、テキストフィールドに入力し、Facturaの保存時に保存します。これはfacturas#newビューです。

<h1>Nueva Factura</h1>

<%= form_for @factura do |f| %>
<% if @factura.errors.any? %>
    <h2>Errores:</h2>   
    <ul>
        <% @factura.errors.full_messages.each do |message| %>
            <li><%= message %></li>
        <% end %>
    </ul>
<% end %>
<p>
<div class = "contenedor_factura">
    <%= f.label :numero %><br />
    <%= f.number_field :numero %><br />
    <%= f.label :fecha %><br />
    <%= f.date_select :created_at %><br />
</div>
<div class = "contenedor_cliente">
    <%= f.fields_for @cliente do |builder| %>
        <%= builder.label :cedula, "Cédula" %>
        <%= builder.text_field :cedula %>
        <%= builder.label :nombres, "Nombres" %>
        <%= builder.text_field :nombres %>
        <%= builder.label :direccion, "Dirección" %><br />
        <%= builder.text_field :direccion %>
        <%= builder.label :telefono, "Teléfono" %><br />
        <%= builder.text_field :telefono %>
        <%= builder.hidden_field :id%>
    <% end %>
</div> 
<div class = "contenedor_productos">

</div>


<%= f.label :subtotal %><br />
<%= f.text_field :subtotal %>
<br />
<%= f.label :iva %><br />
<%= f.text_field :iva %>

 </p>
  <p>
    <%= f.submit "Agregar Nueva Factura" %>
  </p>
  <% end %>

Clienteが新しい場合、問題はありませんが、保存されますが、Clienteが存在する場合は、このメッセージが表示されます。

ActiveRecord::RecordNotFound in FacturasController#create

Couldn't find Cliente with ID=6 for Factura with ID=

私の問題は何ですか?

編集:

これは私のFacturasControllerです

def new
  @factura = Factura.new
  @cliente = @factura.build_cliente
end

def create
  @factura = Factura.new(params[:factura])
  if @factura.save
    redirect_to facturas_path, :notice => "Factura Guardada"
  else
    render "new"
  end
end
4

1 に答える 1

2

nested_attrubesがすでに作成されたモデルを処理するかどうかはわかりません。だから私たちはそれに頼ることはできません。

これはうまくいくはずです

def create
  cliente_attrs = params[:factura].delete :cliente
  @cliente = cliente_attrs[:id].present? ? Cliente.find(cliente_attrs[:id]) : User.create(user_attrs)
  @factura = cliente.facturas.build(params[:factura])
  if @factura.save
    redirect_to facturas_path, :notice => "Factura Guardada"
  else
    render "new"
  end
end

これで、行を削除できますaccepts_nested_attributes_for :cliente

于 2013-01-05T17:50:53.673 に答える