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中使用表单(和嵌套表单)的书籍或一些全面的在线教程,我将非常感谢。表格让我疯了!
答案 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