はじめに
この記事は、Ruby初心者が備忘録としてまとめたものです。間違い等ありましたらご指摘お願いします。
assign_attributes 、updateメソッド
-
assign_attributes
を使用することで複数の属性を一度に設定することが可能になります。また、特定の属性のみを指定することができます。既存のオブジェクトの更新等に使用することができます。
しかし、DBには保存されないので、別途でsave
メソッドが必用になります。
例
def update
@post = Post.find(params[:id])
@post.assign_attributes(body: post_params[:body])# => 属性をbodyのみ指定。titleなど他の属性は変更されません。
if @post.save
flash[:notice] = '更新されました'
redirect_to posts_path
else
render :edit
end
end
(中略)
private
def post_params
params.require(:post).permit(:title, :body, :author_id)
end
-
update
メソッドも似たような働きをしますが、属性の設定と保存を一度に行うことができます。
例
def update
@post = Post.find(params[:id])
if @post.update(post_params) # => 複数の属性を設定し、保存を行う。
flash[:notice] = '投稿が更新されました'
redirect_to posts_path
else
render :edit
end
end
まとめ
1assign_attributes
メソッド
- 指定した属性をセットすることができる
- データベースに保存するされないため、
save
メソッドが必要 - 一部の属性だけを変更し、他の属性を保持したままにできる
2update
メソッド
- 指定した属性を設定し、即座に保存
- post_paramsを使って複数の属性を一括で設定・保存する場合に便利
- コードがシンプルになる
参考