2017-02-22 1 views
-1

Railsの状態に基づいてActiveRecordをを変更する私は、すべての記事を一覧表示していますバルクはまた、私はuser_idを持つユーザでログインしている、私は列AUTHOR_ID 'でモデルの記事を持っている5

posts = Post.all 
私はAUTHOR_IDは現在のuser_idと等しい場合、すべてのポストをチェックしたいともしそうなら、私はオブジェクト

is_author => true 

に新しいフィールドを追加したい、私は私が私のmodでこれを行う必要があります知っている、このポストのオブジェクトで

しかし、いくつかの理由から、これは可能ではありません。

別の解決策は、すべての記事をループになると、新しいフィールドを追加します:

post_with_author = [] 

post.each do |post| 
    add post to new array with new field 
end 

をしかし、これは最良の選択肢ではないようです。

これを行う方法はありますか。

答えて

1

あなたがポストに定義されているAUTHOR_IDしておりますので、あなたができる

posts = Post.where(author_id: user_id).update_all(author: true) 

これは、構築し、単一のSQL UPDATE文を実行し、各ポストのためのオブジェクトを作成しませんでしょう。ここで重要な点は、update_allがすべての検証とコールバックをスキップすることです。