rails 4 ActiveModel::ForbiddenAttributesError [重複] 質問する

rails 4 ActiveModel::ForbiddenAttributesError [重複] 質問する

Rails 4を使って簡単な作成をやってみます

私のコントローラー:

class AdsController < ApplicationController

  def new
    @ad = Ad.new
  end

  def create
    @ad = Ad.new(params[:ad])    
    @ad.save
  end

  def show
    @ad = Ad.find(params[:id])
  end

  def index
    @ads = Ad.first(3)
  end


  private
  def ad_params    
    params.require(:ad).permit(:title, :price, :description)
  end
end

形状:

<%= form_for @ad do |p| %>
  <p><%= p.text_field :title %></p>
  <p><%= p.text_field :price %></p>
  <p><%= p.text_area :description %></p>
  <p><%= p.submit %></p>
<% end %>

私の観点からは問題ありませんが、このエラーが発生しましたActiveModel::ForbiddenAttributesError。何が間違っているのでしょうか?

アップデート:

私の問題は、作成アクションで新しいメソッドに間違った値を渡していたことです。解決策は、ad_paramsそれに渡すことでした

ベストアンサー1

コードが機能するように更新をスキップすることをお勧めします

問題はおそらくコントローラではなくモデルにあります。次のタグで属性にアクセスできるかどうかを確認してください。

attr_accessible :title, :price, :description

Rails 4 では、私が理解しているものとは少し異なる動作をします。この以前の SO の回答には、いくつかの優れたリンクが提供されています。Rails 4 では attr_accessible はどのように使用されますか?

データベースから何かにアクセスするときは常に、attr_accessible/Strong Params を使用する必要があります。

アップデート

ああ、若かったので、Rails 4 が Strong Params を使用していることに気付かなかった。OP が元の問題をすでに解決していることは理解していますが、実際に正しい回答として使用できるようにこれを修正します。

Rails 4 ではコントローラー内の属性をホワイトリストに登録する必要があるため、これはコントローラー レベルの問題になります。

Ad.create(params[:ad].require(:ad).permit(:title, :price, :description))

ほとんどの場合、作成アクションと更新アクションで同じパラメータを許可することになるため、コントローラ内の独自のメソッドに移動するのが最善です。

Ad.create(ad_params)
def ad_params
  params.require(:ad).permit(:title, :price, :description)
end

OP がコメントで指摘したように、彼が実装した permitted_pa​​rams メソッドは、許可から呼び出されていませんでした。

おすすめ記事