2011-04-10 64 views
1

我想在我的用戶模型上使用嵌套屬性進行設置,以便我可以在單個頁面中編輯用戶信息和設置信息。這裏是我的代碼:rails 3接受嵌套屬性不起作用

User.rb

has_one :settings 
accepts_nested_attributes_for :settings, :allow_destroy => true 
attr_accessor :settings_attributes 

的意見/用戶/註冊/ edit.html.erb

<%= f.fields_for :settings do |s| %> 
<p> 
    <%= s.label :newsletter %><br /> 
    <%= s.check_box :newsletter %> 
</p> 
<% end %> 

這看似只是正常工作,正確顯示形式。但是,提交表單時,設置的屬性完全不會改變。

我正在使用Rails 3,並且Devise創建了我的用戶模型。也許我錯過了需要在控制器模型中去的東西?

回答

1

最有可能是使用複數而不是單數設置造成的。嘗試改變這樣:

模式

has_one :setting 
accepts_nested_attributes_for :setting, :allow_destroy => true 

視圖

<%= f.fields_for :setting do |s| %> 
你在使用attr_accessor中的

+2

實際模型被稱爲settings.rb。我正在使用attr_accesor,因爲如果我沒有,我會得到以下:irb(main):002:0> user.settings_attributes NoMethodError:未定義的方法'settings_attributes'爲#<用戶:0x102d7fe80> – goddamnyouryan 2011-04-10 05:57:21

+0

從來沒有得到它的工作。最後只是創建一個新的模型,並通過控制器處理所有這一切 – goddamnyouryan 2011-04-14 09:11:39

+0

抱歉,我想我錯過了您的第一條評論。我仍然認爲這與複數與單數有關,因爲您的模型名稱是複數。但是如果你滿足於將模型名稱作爲「設置」,那麼我認爲你的解決方案可能是要走的路,以避免Rails處理這個問題的任何問題。 – johnmcaliley 2011-04-14 14:10:09