0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

更新メソッドについて (assign_attributes 、update )

Posted at

はじめに

この記事は、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

まとめ

assign_attributesメソッド

  • 指定した属性をセットすることができる
  • データベースに保存するされないため、saveメソッドが必要
  • 一部の属性だけを変更し、他の属性を保持したままにできる

updateメソッド

  • 指定した属性を設定し、即座に保存
  • post_paramsを使って複数の属性を一括で設定・保存する場合に便利
  • コードがシンプルになる

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?