0

私は最初のレールアプリを作成しており、昨日すべてが機能していました。今日、プレイヤーが has_many と belongs_to を使用してチーム ページにプルできるように、ビューに関連付けを作成しました。PlayersController#create メッセージで ActiveModel::ForbiddenAttributesError が表示され続けるため、新しいプレーヤーを作成できません。

抽出されたソース (27 行目あたり):

  def create
    @player = Player.create(params[:player])
    respond_to do |format|
      if @player.save

パラメーター:

{"utf8"=>"✓",
 "authenticity_token"=>"uw5w2sOgNF6y3+Jv6kvTj3X/dV2+PAVo2/OyHinIirY=",
 "player"=>{"first_name"=>"test",
 "last_name"=>"",
 "address_1"=>"",
 "address_2"=>"",
 "city"=>"",
 "state"=>"",
 "zip"=>"",
 "phone_number"=>"",
 "email"=>"",
 "birthday"=>"",
 "position"=>"",
 "bio"=>"",
 "team"=>"",
 "team_id"=>"1",
 "number"=>""},
 "commit"=>"Create Player"}

作成用の私のプレーヤーコントローラーは次のとおりです。

def create @player = Player.new(player_params)

respond_to do |format|
  if @player.save
    format.html { redirect_to @player, notice: 'Player was successfully created.' }
    format.json { render action: 'show', status: :created, location: @player }
  else
    format.html { render action: 'new' }
    format.json { render json: @player.errors, status: :unprocessable_entity }
  end
end

終わり

4

4 に答える 4

2

コントローラーにこのplayer_paramsメソッドがあり、それを使用してパラメーターをモデル アクション (作成、更新) に渡す必要があります。

class PlayersController
  ...
  def create
    @player = Player.create(player_params)
    ...
  end

  private

  def player_params
    allow = [:first_name, :last_name, :address_1, :address_2, :city, :state, :zip, :phone_number, :email, :birthday, :position, :bio, :team, :team_id, :number]
    params.require(:player).permit(allow)
  end
end
于 2013-07-26T05:33:28.293 に答える
1

私はすでに params.require ビットを適用していたときに、これに対する解決策を探して夢中になりました。したがって、 cancanを使用している人は、この部分を ApplicationController に追加する必要があります。

参照: https://github.com/ryanb/cancan/issues/571

before_filter do
  resource = controller_name.singularize.to_sym
  method = "#{resource}_params"
  params[resource] &&= send(method) if respond_to?(method, true)
end
于 2014-05-26T22:39:26.667 に答える
0
class PlayersController

   ...

 def create
     @player = Player.new(player_params)

   ...

  end

 private

 def player_params

   params.require(:player).permit(:first_name, :last_name, :address_1, :address_2, :city, :state, :zip, :phone_number, :email, :birthday, :position, :bio, :team, :team_id, :number)

   end

end
于 2014-01-10T15:21:54.593 に答える