0

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

4

1 回答 1

1

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

attr_accessible :profile_attributes

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

<% new_profile = resource.build_profile %>
...
<%= f.fields_for :profile, new_profile, ...
于 2013-06-02T00:18:49.660 回答