表单中的未定义方法

时间:2010-12-10 07:40:38

标签: ruby-on-rails-3

class User
    has_one :user_profile
end
class UserProfile
    belongs_to :user
end

我正在渲染一个用于编辑用户帐户的表单:

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

但这会引发错误:

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

为什么要使用first_name的值?

如何解决此问题(不使用部分内容)?

另外,如果有人可以指导我阅读Rails中使用表单(和嵌套表单)的书籍或一些全面的在线教程,我将非常感谢。表格让我疯了!

1 个答案:

答案 0 :(得分:3)

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

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

如果您的表单需要同时编辑User和UserProfile模型对象,则需要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