如何在ActiveRecord验证错误后填写自动填充功能

时间:2014-02-13 17:58:12

标签: ruby-on-rails activerecord autocomplete ruby-on-rails-3.2

我正在使用Rails 3.2.5和rails3-jquery-autocomplete。 我的方法是:我有一个名为“supplier_name”的attr_accessor,当用户填写自动完成并选择propper供应商时,它会填充供应商ID为“suplier_id”的字段。 当我为表单创建自动填充字段时,我发现了一个问题,每次我编辑记录时,supplier_name attr_accessor都为空。检查代码,我可以看到隐藏字段“supplier_id”已正确填充。

所以,我用这种方式修复它,只是一个例子:

class Invoice < ActiveRecord::Base
 belongs_to :supplier
 ...
 attr_accessor :supplier_name
 attr_accessible :some_stuff, :supplier_name, :supplier_id, :some_other_stuffs

 validates :some_stuff, presence: true

 def supplier_name
  self.supplier_name.company_name unless self.new_record? rescue ""
 end

太棒了!我解决了我的问题编辑但是...如果我正在创建一个新记录,提交,并忘记填写该字段:some_stuff,“supplier_name”将变为空,但“supplier_id”将正确填充。

那么,解决这个问题的最佳方法是什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

尝试抢救self。 它应该有效,因为它应该返回你提交的同一个对象。

如果这不起作用,您可以尝试添加一个setter方法,如:

class Invoice < ActiveRecord::Base
 belongs_to :supplier
 ...
 attr_accessor :supplier_name
 attr_accessible :some_stuff, :supplier_name, :supplier_id, :some_other_stuffs

 validates :some_stuff, presence: true

 def supplier_name
  self.supplier_name.company_name unless self.new_record? rescue self
 end

 def supplier_name=(supplier_name)
  supplier_name
 end
end

希望它有所帮助!

答案 1 :(得分:0)

经过大量研究,问题已经解决,取代了方法:

def supplier_name
 self.supplier_name.company_name unless self.new_record? rescue self
end

def supplier_name
 self.supplier_name.try(:company_name)
end