0

私は JSON API を持つ Rails 3.2.2 アプリケーションに取り組んでおり、データを挿入するために CLI クライアントを使用しています。Author モデル以外は正常に動作します。新しい投稿を作成しようとすると (投稿の belongs_to :author と Author has_many :posts)、次のエラーが表示されます。

<h1>
  ActiveModel::MassAssignmentSecurity::Error in PostsController#create
</h1>
<pre>Can't mass-assign protected attributes: name</pre>

このトピックについて多くの調査を行いましたが、有効な解決策が見つかりませんでした:-(

私は attr_accessible を使用して MassAssignent エラーを回避しています。これは他のすべてのモデルでは機能しますが、「作成者」名属性では機能しません。

オーサーモデルは次のとおりです。

class Author < ActiveRecord::Base
  attr_accessible :name, :email

  extend FriendlyId
  friendly_id :name, use: :slugged

  # some validations

  has_many :posts
  #authlogic
  acts_as_authentic

  # some stuffs
end

実際、私は whitelist_attributes を無効にして問題を解決しましたが、これは便利な方法ではないと思います (そしておそらく良い考えではありません)。

私の質問は: attr_accessible がここで機能しないのはなぜですか? また、ホワイトリストを無効にせずに問題を解決するにはどうすればよいですか?

ありがとうございました、

レヴァン

編集 :

新しい投稿を作成するメソッド:

def create
  @post = Post.new(params[:post])
  @post.author = current_author
  # respond to etc.
end

current_author は、指定された API キーを使用して作成者を見つけます。

4

1 に答える 1

1

私は解決策を見つけました!:-)

問題は、Rails 3.2 で動作しないacts_as_tggable_on_steroids プラグインを使用したことでした...

"Author" は :name 属性を持つ唯一のモデルなので、問題は Author にあると思いました ... しかし、問題は Tag モデル (acts_as_taggable_on_steroid プラグインにあります) にありました。実際、その :name 属性は「アクセス可能」ではありません。

そのため、 Rails 3.x で正しく動作するacts_as_taggable_on gem ( https://github.com/mbleigh/acts-as-taggable-on ) を使用します。

于 2012-05-01T14:52:51.433 に答える