2010-12-10 95 views
1
class User 
    has_one :user_profile 
end 
class UserProfile 
    belongs_to :user 
end 

我呈现形式编辑用户的帐户:未定义的方法

NoMethodError in Account#edit 
undefined method `Andy' for #<User:0x5f375e8> 

正在使用的first_name的价值为什么:

<%= form_for current_user do |f| %> 
<%= f.text_field current_user.user_profile.first_name %> 
<%= end %> 

但是,这将引发一个错误?

如何解决此问题(不使用部分)?另外,如果有人能够引导我阅读一本书或一些在Rails中使用表单(和嵌套表单)的综合在线教程,我将非常感谢它。表格让我疯狂!

回答

3

text_field帮助器的第一个参数是一个命名模型对象属性的符号。所以你的情况应该是:

<%= form_for current_user.user_profile do |f| %> 
    <%= f.text_field :first_name %> 
<% end %> 

如果表单需要编辑的用户和用户配置模型对象,你需要fields_for切换上下文。

<%= form_for current_user do |f| %> 
    <%= f.text_field :some_user_attribute %> 
    <%= f.fields_for current_user.user_profile do |f| %> 
    <%= f.text_field :first_name %> 
    <% end %> 
<% end %> 

参见:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

+1

看来,`first_name`是在`user_profile`对象,该对象所属的用户对象。所以他需要`f.fields_to`来创建一个嵌套模型的表单。 – PeterWong 2010-12-10 11:06:20