2016-06-17 9 views
1

上のRubyでデータをupdate_attributes、私はが、私はRuby on Railsをに取り組んでいレール

def update 
    @post = Post.find(params[:id]) 

    if @post.update_attributes(params[:post]) 
     redirect_to post_path,:notice =>"post has been updated" 
    else 
     render "edit" 
    end 
end 

それが更新していないと、エラーが来て、私のデータを更新しようとしています: -

ActiveModel: :PostsControllerのForbiddenAttributesError#update

私を助けてください!

+0

にあなたが投稿のサンプルコードは不完全です。ポストコントローラーのアクションメソッド –

+2

こんにちは、オーバフローのスタックへようこそ。普通はあなたのコントローラーでは、 'params [:post]'を渡すのではなく、 'permit'と' attributes'をセットする必要があります。また、あなたのモデルに 'attr_accessible'がありますか?あなたの質問を編集して答えを記入してください(コメント内のコードフォーマットは恐ろしいです) –

+1

また、あなたのパラメータを "強く"(つまり、変更したくない属性から保護する)方法に関するRailsガイドがあります:http ://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters(私たちは 'attr_accessible'をもう使用しないため) –

答えて

3

params [:post]に基づいて値を更新するだけでは、強力なパラメータを使用してホワイトリストを作成する必要があります。

コントローラでは、このような基本的に白いポストのparams

def post_params 
    params.require(:post).permit(:title, :description) 
end 

そしてコントローラ

def update 
    @post = Post.find(params[:id]) 
    if @post.update_attributes(post_params) 
     redirect_to post_path,:notice =>"post has been updated" 
    else 
     render "edit" 
    end 
    end 
    private 
    def post_params 
    params.require(:post).permit(:title, :description) 
    end 
+0

両方のコードスニペットはコントローラ内にありますか? – Sebin

+0

はいコードを更新しました – Saad

+0

ありがとうございます。 - 未定義メソッド 'update_attributes 'for nil:NilClass –

関連する問題