まとめてオブジェクトの属性を変更したい時に便利!assign_attributesメソッド

こんにちは!kossyです!





さて、今回はまとめてオブジェクトの属性を変更したい時に便利なメソッド、
assign_attributesの使い方をブログに残してみたいと思います。



railsであれば、属性の値を上書きしたい時は、

@article.title = "sample"

みたいな書き方をすると思うのですが、もし上書きしたい属性が複数あった際に、
何度も似たような記述をするのは面倒です。

そんな時に使えるのが、assign_attributesメソッドです。



使い方
送られてきたパラメータの値をまとめて上書きしたい時なんかに便利です。

def create
  @article = Article.new(article_params)
  if params[:status] == 0 
    @article.assign_attributes({ title: "[未]" + params[:title], content: "[下書き]" + params[:content])
  end
  @article.save
end

private

def article_params
  params.require(:article).permit(:id, :title, :content, :status)
end

まぁ上記の例のような使い方は絶対しないと思いますが笑
アクション内で、送られてきた値とは別の値を更新したい時なんかに使えると思います。

ちなみに、update!とは違い、DBの値は更新しないので、
saveメソッドを使って変更をDBに保存しています。




参考にさせていただいた記事
ActiveRecord の attribute 更新方法まとめ - Qiita
Active Recordのattributesの更新メソッド | 酒と涙とRubyとRailsと