在用户模型中保存配置文件的嵌套属性(Rails)

时间:2013-06-02 00:08:11

标签: ruby-on-rails profile nested-attributes

我正在使用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 },现在问题已经消失了:)

1 个答案:

答案 0 :(得分:1)

也许你在user.rb文件中遗漏了这个:

attr_accessible :profile_attributes

此外,如果它不起作用,请尝试

<% new_profile = resource.build_profile %>
...
<%= f.fields_for :profile, new_profile, ...