質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

813閲覧

Ruby 書式について

orori

総合スコア42

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/06/12 02:57

Railesチュートリアルを学んでいます。
11章で、一番下のような記述のコードを見たのですが、この中で

User.find_by(email: params[:email])

なぜ上では、find_byメソッドのあとのカッコ内は(シンボル 値)となっているにもかかわらず、
(上は右のようにもかけますが、User.find_by(:email=> 'example@sample.com')

user.update_attribute(:activated, true)

では、update_attributeメソッドのあとのカッコ内は、(シンボル , 値)になっているのでしょうか?

ひとつひとつのメソッドで、それぞれ書式を記憶するしかないのか、
あるいは、なにか考え方があるのでしょうか?

よろしくお願いいたします。

Ruby

1class AccountActivationsController < ApplicationController 2 3 def edit 4 user = User.find_by(email: params[:email]) 5 if user && !user.activated? && user.authenticated?(:activation, params[:id]) 6 user.update_attribute(:activated, true) 7 user.update_attribute(:activated_at, Time.zone.now) 8 log_in user 9 flash[:success] = "Account activated!" 10 redirect_to user 11 else 12 flash[:danger] = "Invalid activation link" 13 redirect_to root_url 14 end 15 end 16end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

上は右のようにもかけますが

これはbare hashと呼ばれるもので、実際に渡っている引数はUser.find_by({ email: params[:email] })、すなわちUser.find_by({ :email => params[:email] })というHashなのです。

投稿2018/06/12 02:59

編集2018/06/12 03:00
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/06/12 03:03

そして、update_attributeは「バリデーションをスキップする」という特殊な性質を持っているので、通常のコードに使うことは全くおすすめできません。Hashを受け取る.update(key: value)を使いましょう。
orori

2018/06/12 03:11

なるほど!引数にハッシュを持ってくるか、書式があるか、の違いがあるということですね。また、update_attributeについてもわかりました。初めての質問で緊張しましたが、大変助かりました。 ありがとうございました!
orori

2018/06/12 04:06

すみません、ご回答についてお聞きしたいのですが、bare hashについてですが、メソッドの最後の引数がハッシュリテラルなら、省略できるとありますが、今回のように1つだけのときもそれは最後の引数という理解でよろしかったでしょうか?
maisumakun

2018/06/12 04:15

そうですね、1つしかなくても最後は最後です。
orori

2018/06/12 04:20

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問