我正在使用与has_many相关联的3个模型构建轨道3.2.16应用程序,但我的保存操作无效。这是我的模特:
class Cliente < ActiveRecord::Base
has_many :prestamos
accepts_nested_attributes_for :prestamos, reject_if: :all_blank
end
class User < ActiveRecord::Base
has_many :prestamos
has_many :clientes, :through => :prestamos
end
class Prestamo < ActiveRecord::Base
validates_numericality_of :monto, only_integer: true
validates :monto, presence: true
belongs_to :user
belongs_to :cliente, inverse_of: :prestamos
end
当我尝试使用此
在clientes_controller #new中构建我的@cliente时@cliente = current_user.clientes.build
和#create
中的这个@cliente = current_user.clientes.build(params[:cliente])
并使用此视图
<%= simple_form_for(@cliente) do |f| %>
<%= f.input :nombre %>
<%= f.input :cedula %>
<%= f.input :direccion %>
<%= f.simple_fields_for :prestamos do |builder| %>
<%= builder.input :monto %>
<% end %>
<%= f.button :submit %>
<% end %>
渲染HTML是预期的HTML,但在保存时,我在prestamo模型中获得了与monto相关的验证错误。顺便说一句,monto字段显示两次。
我有的错误:
Prestamos monto不是一个数字 Prestamos monto不能空白
我真的希望有人可以帮助我。
提前致谢。
答案 0 :(得分:0)
好吧,我可以解决它,但我不确定这是否是最好的方法,因为我在Rails中很新(3个月)。这就是我所做的:
首先,我将我的连接模型Prestamo更改为:
class Prestamo < ActiveRecord::Base
attr_accessible :monto, :user_id, :cliente_id
validates_numericality_of :monto, only_integer: true
validates :monto, presence: true
belongs_to :user
belongs_to :cliente, inverse_of: :prestamos
end
验证已经存在,我刚刚将:user_id
添加到attr_accessible
。
第二,我改变了我的新动作并创建了动作:
新:
def new
@cliente = Cliente.new
@cliente.prestamos.build(user_id: current_user.id)
end
创建:
@cliente = Cliente.new(params[:cliente])
最后,我在表单中添加了一个隐藏字段,只是为了存储user_id
<%= form.simple_fields_for :prestamos do |f| %>
<%= f.input :monto %>
<%= f.input :user_id, as: :hidden %>
<% end %>