46621


初心者です。ご助力お願いいたします。  
update_attributeの実行方法がわかりません。  
findを使ってupdate_attributeをしようとしたところ以下のエラーが出ました。

[code]

    irb(main):034:0> @user = User.find(1)
    
    irb(main):035:0> @user.update_attribute(name: "ABC")
    Traceback (most recent call last):
            1: from (irb):35
    ArgumentError (wrong number of arguments (given 1, expected 2))
    
    irb(main):036:0> @user.update_attributes(name: "ABC")
       (0.2ms)  BEGIN
       (0.2ms)  COMMIT
    => true
    
[/code]

なぜupdate_attributesではエラーが出ずにupdate_attributeではエラーがでるのでしょうか？


CC BY-SA 4.0
2018-07-14T17:43:45.427
46620
2018-07-15T09:06:33.077
2018-07-15T09:06:33.077
29317
question
ruby-on-rails
update_attributeの実行方法について


> なぜupdate_attributesではエラーが出ずにupdate_attributeではエラーがでるのでしょうか？

`update_attribute`の呼び出し方が間違っていることが原因です。  
以下のように呼び出すと実行できると思います。

[code]

    @user.update_attribute(:name, "ABC")
    
[/code]

* * *

## update_attribute

`update_attribute`は1つの属性のみを更新・保存するメソッドになります。  
以下のように、属性名とその値を指定し使用します。(参考:
[update_attribute](https://apidock.com/rails/ActiveRecord/Persistence/update_attribute))

[code]

    # 引数が2つ
    update_attribute(name, value)
    
[/code]

そのため、以下で実行できると思います。

[code]

    @user.update_attribute(:name, "ABC")
    
[/code]

## update_attributes

一方、`update_attributes`は複数の属性をまとめて更新・保存するメソッドになります。  
以下のように使用します。([参考:
update_attributes](https://apidock.com/rails/ActiveRecord/Persistence/update_attributes))

[code]

    # 引数がハッシュ
    update_attributes(attributes)
    
[/code]

引数の`attributes`部分にはハッシュを渡すことができます。  
引数にハッシュを渡すことで複数の属性をまとめて更新・保存できます。

[code]

    # 引数がハッシュ  {name: "ABC", age: 10}部分がハッシュ
    @user.update_attributes({name: "ABC", age: 10})
    # rubyでは、メソッドの末尾の引数のハッシュは`{, }`を省略できるので
    # 以下も同じ意味になります。
    @user.update_attributes(name: "ABC", age: 10)
    
[/code]


CC BY-SA 4.0
2018-07-14T17:52:40.320
46621
2018-07-14T18:31:38.193
2018-07-14T18:31:38.193
46620
answer