嵌套属性-未经许可的参数Rails 4



关于Rails 4中嵌套属性的强参数问题,SO上有很多资源,但我找不到任何解决方案:(如果是重复的,很抱歉)

我的会员和个人资料之间的关系是1-1。当试图用配置文件属性更新成员时,我遇到了以下错误:

Unpermitted parameters: profile

我的参数在哪里

===> params: {"member"=>{"profile"=>{"first_name"=>"test", "last_name"=>"test"}, "email"=>"test@test.com"}}

我的型号:

成员.rb

class Member < ActiveRecord::Base
  ...
  has_one :profile
  accepts_nested_attributes_for :profile
end

简介.rb

class Profile < ActiveRecord::Base
  belongs_to :member
end

我的表格:

编辑.html slim

= simple_form_for [:admin, @member] do |f|
  = f.simple_fields_for @member.profile do |pf|
    = pf.input :first_name
    = pf.input :last_name
  = f.input :email
  = f.button :submit

和我的控制器:

管理员/members_controller.rb

class Admin::MembersController < Admin::BaseController
  before_action :set_member, only: [:edit]
  def edit
  end
  def update
    if @member.update(member_params)
      Rails.logger.debug "===> (1)"
      redirect_to edit_admin_member_path
    else
      render action: 'edit'
    end
  end
  private
    def set_member
      @member = Member.find(params[:id])
    end
    def member_params
      params[:member].permit(:email, profile_attributes: [:first_name, :last_name ])
    end
end

我尝试了很多事情,但不明白我的错误在哪里。。此外,在更新方法中,它表示@成员已正确更新(显示===>(1))

好的,得到它。

我认为这是由simple_form:引起的

= simple_form_for [:admin, @member] do |f|
  = f.simple_fields_for :profile, @member.profile do |pf|
    = pf.input :first_name
    = pf.input :last_name
  = f.input :email
  = f.button :submit

尝试在member_params 中的profile_attributes内添加:member_id

所以它看起来是这样的:

def member_params
      params[:member].permit(:email, profile_attributes: [:first_name, :last_name, :member_id ])
end

最新更新