2011-04-13 28 views
0

問題已解決。 HTML5 localStorage與我混淆。使用new()方法填充表單 - 方法

我想從新() - 方法的參數填充表單,我無法讓它工作。

每個用戶都有保存在數據庫中的表單的默認值(在一個名爲defaults的表中),當您創建新記錄時,我希望它使用該表中的值填充。

@default = Default.find_by_user_id(current_user.id) 
@invoice = Invoice.new(:title => @default.title, :company_information => @default.company_information) 

render 'create' 

,然後在我的觀點:

form_for @invoice, :url => { :action => "create"} do |f| ... 

什麼情況是,是默認發票值被創建,但在新的()創建不是的 - 方法。

最奇怪的是,當我檢查源代碼的頁面加載後,輸入值屬性充滿了正確的信息,而不是在網頁上呈現...

+0

是否有原因爲默認值創建了單獨的模型?您可以在您的遷移中附加默認值,或者在'after_initialize'回調中將它們設置到您的模型中。 – coreyward 2011-04-13 15:26:48

+0

是的。用戶可以用另一種形式編輯這些默認值,因此當它們創建新記錄時,默認值由它們定義。 – 2011-04-13 15:40:03

+0

這是有道理的。 – coreyward 2011-04-13 15:43:40

回答

1

你在做什麼在這裏:

Invoice.new(:title => @default.title, :company_information => @default.company_information) 

有意義,應該工作...除非這些字段從質量分配的保護。

class Invoice << ActiveRecord::Base 
    attr_accessible :some, :other, :fields 
    ... 
end 

這將允許您設置:some, :other, (and) :fields當你初始化你的發票對象,但它會阻止你設置任何其他「屬性」。

+0

我不是他們受保護,因爲我可以看到他們兩個我日誌使用logger.info和我的源代碼... – 2011-04-13 15:57:29

+0

'attr_accessible'和'attr_protected'不會改變可視性(public,protected,private);它設置Rails是否應該允許批量分配來設置該屬性/字段。 http://guides.rubyonrails.org/security.html#mass-assignment – coreyward 2011-04-13 16:11:08

0

奇怪的是,我沒有看到你想要做的事情有什麼問題......也許在瀏覽器端(JavaScript,CSS等)的東西是什麼東西呢?

檢查表單輸入內是否有可選內容,或嘗試創建不含任何JavaScript或CSS的香草形式。或者,你可以使用類似甚至嘗試簡單的打印屬性的內容中的HTML(不使用輸入/ textarea的標籤):

<%= @invoice.title %> 

這至少可以幫助確認默認值,其中確實設置。此外,使用:

<%= f.object.title %> # place me inside the form_for block 

將幫助您確認表單構建器實例也具有正確的值。

祝你好運。