【问题标题】:Rails 4 nested fields_for not savingRails 4嵌套字段_用于不保存
【发布时间】:2017-03-26 03:10:32
【问题描述】:

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

我有一个与用户 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 错误。 我尝试将 user: [:email] 添加到所需的 prarams #syntax 错误 我已经尝试在模型中使用和不使用 accept_nested_attributes #no effect。

谁能给我线索,因为我显然一无所知。

谢谢。

【问题讨论】:

    标签: ruby-on-rails-4 view controller nested-forms


    【解决方案1】:

    我看到两个问题:

    首先 - = 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])

    希望它能解决您的问题。

    【讨论】:

    • 我进行了您建议的更改,但是白名单现在给了我一个语法错误,这是我在尝试进行这些更改时得到的.../home/ubuntu/workspace/app /controllers/profiles_controller.rb:95:语法错误,意外',',期待=> ...s:[:电子邮件]
    • 完整的白名单行... params.require(:profile).permit(:user_id, :name, :about, :country_code, :state_code, :city, :avatar, :company, : company_url,:用户名,users_attributes:[:电子邮件],:online_store_url,:facebook_url,:instagram_url,:blog_url,passion_ids:[])
    • 我将 users_attributes 移动到白名单的末尾并停止收到语法错误,但现在我得到了这个形式...未定义的局部变量或方法 `users' for #:0x007f64dc020d58> 因为我删除了@profile.user 引用并将其替换为用户。
    • 我找到了答案,看起来 :id 符号必须包含在属性中。我点击了这个链接,它解决了我的问题,你对我完成它 J.D. 有很大帮助,所以我给你功劳。链接:pluralsight.com/guides/ruby-ruby-on-rails/…
    • 感谢分享!是的, :id 必须包括在内......很高兴它有帮助
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多