我正在使用Devise gem在RoR中构建小页面并且卡住了。 当我想通过用户模型的嵌套属性保存配置文件时出现错误,我无法克服它。
用户模型
has_one :profile
accepts_nested_attributes_for :profile
个人资料模型
belongs_to :user
修改用户视图(此处我想添加个人资料信息)
<% resource.build_profile %>
<%= form_for(resource, :as => resource_name,
:url => registration_path(resource_name),
:html => { :method => :put, :class => "custom" }) do |f| %>
(some fields for user)
<%= f.fields_for :profile, :child_index => resource.id,
:html => {:class => "custom"} do |profile| %>
<%= profile.label :name %>
<%= profile.text_field :name %>
<%= profile.label :surname %>
<%= profile.text_field :surname %>
<% end %>
<%= f.submit "Update my profile!" %>
<% end %>
浏览器错误
Internal server error
终端错误
!! Unexpected error while processing request: expected Array (got Rack::Utils::KeySpaceConstrainedParams) for param `profile_attributes'
感谢您的建议:)
修改
这是一个愚蠢的错误......我的表单中有这部分代码:
<%= profile.select :gender, %w[Male Female], {}, { :index => nil }%>
我删除了{ :index => nil }
,现在问题已经消失了:)
答案 0 :(得分:1)
也许你在user.rb文件中遗漏了这个:
attr_accessible :profile_attributes
此外,如果它不起作用,请尝试
<% new_profile = resource.build_profile %>
...
<%= f.fields_for :profile, new_profile, ...