2014-02-13 123 views
0

我正在使用Rails 3.2.5和rails3-jquery-autocomplete。 我的方法是:我有一個名爲「supplier_name」的attr_accessor,當用戶填充自動完成並選擇propper供應商時,它會使用供應商的id填充字段「suplier_id」。 當我爲表單創建自動填充字段時,我發現了一個問題,每當我編輯記錄時,supplier_name attr_accessor都變空了。檢查代碼,我可以看到隱藏字段「supplier_id」填寫正確。如何在ActiveRecord驗證錯誤後填充自動填充

所以,我定是這樣,只是一個例子:

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」將正確填寫。

那麼,最好的解決方法是什麼?

感謝您的任何幫助。

回答

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 
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 

希望它能幫助!

+0

Unfortunally的應用程序保持相同的行爲,沒有進步! :( – drmwndr

+0

我更新了代碼,試試新版本 –

+0

感謝Ballona,問題已經解決,將self.supplier_name.try(:company_name)替換爲「self.supplier_name.company_name,除非self.new_record?rescue self」 – drmwndr