1

強力なパラメーターに関する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

Profile.rb

class Profile < ActiveRecord::Base
  belongs_to :member
end

私のフォーム:

edit.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

そして私のコントローラー:

admin/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

私は多くのことを試しましたが、私の間違いがどこにあるのかわかりません..さらに、更新メソッドでは、 @member が正しく更新されていると表示されます (===> (1) を表示)

4

2 に答える 2

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
于 2013-08-27T20:27:09.507 に答える
1

:member_id入っている中身profile_attributesを追加してみるmember_params

したがって、次のようになります。

def member_params
      params[:member].permit(:email, profile_attributes: [:first_name, :last_name, :member_id ])
end
于 2014-02-28T23:40:05.320 に答える