Rails 4 嵌套 fields_for 未保存

Rails 4 nested fields_for not saving

我看到很多帖子,但不确定它们是否适用于我的问题。主要是因为当我尝试实施这些解决方案时,我遇到了语法错误。我不知道为什么这似乎是个问题。

我的配置文件对象与用户有 1:1 关系。在个人资料的编辑中,我想保存用户的电子邮件。但是这里不会保存是代码和输出...

查看:

              = semantic_form_for @profile do |f|
                = f.inputs class: "form-group" do
                  = f.input :name, input_html: { class: "form-control" }
                  = f.input :username, input_html: { class: "form-control" }
                  = f.semantic_fields_for @profile.user do |u|
                    = u.input :email, input_html: { class: "form-control" }

传递给控制器​​的参数:

{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"iMkkLX6qN7PagmbnEQlQZ0CH5Q/fl+G9273eHFO9aRk8EG4MisEi3PwQOWocU2wp3UW5ju4DOJcUh5v19pS46A==", "profile"=>{"name"=>"John Doe", "username"=>"JohnnyD", "user"=>{"email"=>"jdoe@email.com"}, "commit"=>"Save", "controller"=>"profiles", "action"=>"update", "id"=>"4"}

控制器的响应:

Unpermitted parameter: user

白名单:

params.require(:profile).permit(:name, :username, :user)

模特:

class Profile < ActiveRecord::Base
  belongs_to :user

  accepts_nested_attributes_for :user
end

class User < ActiveRecord::Base
  has_one :profile, :dependent => :destroy
end

我尝试将 users_attributes: [:email] 添加到所需的参数中 #syntax 错误。 我尝试将用户:[:电子邮件] 添加到所需的 prarams #syntax error 我试过在模型中使用和不使用 accepts_nested_attributes #no effect.

谁能告诉我,因为我显然一无所知。

谢谢。

我看到两个问题:

第一个 - = f.semantic_fields_for @profile.user do |u| 应该是:

= f.semantic_fields_for users do |u|

(这里是告诉Rails选择相关的数据库table,所以应该是复数users)

其次 - strong params 应该真的像你已经尝试过的那样:

params.require(:profile).permit(:name, :username, users_attributes: [:email])

希望它能解决您的问题。