0

Railsのイントロレベルの素晴らしいチュートリアルをフォローしていますが、これに到達するまでは素晴らしい経験でした。

ActiveModel::MassAssignmentSecurity::Error in CommentsController#create

Can't mass-assign protected attributes: article_id

これはCommentsControllerがどのように見えるかです

class CommentsController < ApplicationController

    def create
        article_id = params[:comment].delete(article_id)

        @comment = Comment.new(params[:comment])
        @comment.article_id = article_id

        @comment.save

        redirect_to(article_path(@comment.article),
            :notice => "Comment added by #{@comment.author_name}.")
    end

end

チュートリアルによると、createメソッドをこのように書くのではなく、このように書くことで、@comment = Comment.new(params[:comment]一括@comment.save割り当てセキュリティエラーを回避できます。これは、Rails 3.2.8を実行していて、そのチュートリアルの作成者が執筆時点でRails 3.2.2を実行していたため、異なるバージョンのRailsを使用したことが原因だと思います。

誰かが私に解決策を提供してもらえますか?ありがとう

編集:

少しグーグルで調べたところ、:asオプションを使用してクラスの役割を定義できることがわかりましたが、ここで使用する必要があるかどうかはわかりません。私は今日Railsを学び始めたばかりですが、いくつかの基本を知った後も、まだ頭を悩ませようとしています。

EDIT2:移行ファイル

class CreateComments < ActiveRecord::Migration
    def change
        create_table :comments do |t|
            t.integer :article_id
            t.string :author_name
            t.text :body
            t.timestamps
        end
    end
end
4

1 に答える 1

0

おそらく:article_id、ではなく、paramsからキーを削除する必要がありarticle_idます。

article_id = params[:comment].delete(:article_id)

それ以外の

article_id = params[:comment].delete(article_id)

Rubyは、自己割り当てに対して未定義のエラーをスローしません。

a = a
=> nil
b = c
=> NameError
于 2012-09-23T08:29:49.800 に答える