2017-03-26 71 views
0

我看到很多帖子,但我不确定它们是否适用于我的问题。主要是因为当我尝试实现这些解决方案时,出现语法错误。我不知道为什么这似乎是这样一个问题。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" } 

的PARAMATERS:

{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"iMkkLX6qN7PagmbnEQlQZ0CH5Q/fl+G9273eHFO9aRk8EG4MisEi3PwQOWocU2wp3UW5ju4DOJcUh5v19pS46A==", "profile"=>{"name"=>"John Doe", "username"=>"JohnnyD", "user"=>{"email"=>"[email protected]"}, "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]至所需的PARAMS #syntax错误。 我已经尝试添加用户:[:电子邮件]到所需的prarams #syntax错误 我已经尝试过,并没有在模型#no效果accept_nested_attributes。

有人能告诉我,因为我显然无能为力。

谢谢。

回答

0

我看到两个问题:

首先 - = f.semantic_fields_for @profile.user do |u|应该是:

= f.semantic_fields_for users do |u|

(在这里,你告诉Rails的挑选相关的数据库表,所以应该是复数users

和第二 - 强参数应该像你已经尝试过的那样:

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

希望它能解决您的问题。

+0

我做了你所建议的改变,但白名单现在给我一个语法错误,这是我在任何时候尝试做出这些改变.../home/ubuntu/workspace/app/controllers/profiles_controller。 rb:95:语法错误,意外的',',期待=> ... s:[:email] –

+0

完整白名单行... params.require(:profile).permit(:user_id,:name,:about ,:country_code,:state_code,:city,:avatar,:company,:company_url,:username,users_attributes:[:email],:online_store_url,::facebook_url,:instagram_url,:blog_url,passion_ids:[]) –

+0

I moved the users_attributes到白名单的末尾,并停止获取语法错误,但现在我得到这个形式......未定义的局部变量或方法'用户'为#<#:0x007f64dc020d58>因为我删除了@ profile.user引用并将其替换为用户。 –