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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

499閲覧

Rubyのbefore_validationの挙動について

tatsuya_055

総合スコア13

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/02/25 14:08

ただ今、「現場で使える Ruby on Rails 5速習実践ガイド」という書籍で学習を行なっているのですが、以下のモデルのコードのset_nameless_nameの部分が腹落ちしないので、ご教授頂けますと幸いです。

環境はRuby 2.5,Rails 5.1です。

class Task < ApplicationRecord before_validation :set_nameless_name validates :name, presence: true validates :name, length: { maximum: 30 } private def set_nameless_name self.name = '名前なし' if name.blank? end end

疑問点は以下となります。

  1. self.nameでなければ想定の値の取得ができないのでは。
  2. ブラウザからの動作確認時に、nameに値が入るよう入力した際に、binding.pryself.name = '名前なし' if name.blank?の前に入れて、nameの値を確認した際はnilとなっているのに、なぜself.name = '名前なし'の処理が走らないか。
  3. self.name = '名前なし' if name.blank?の後にbinding.pryを入れるとTaskクラスのオブジェクトでなくなるのはなぜか。
=> #<ActiveSupport::Callbacks::CallTemplate:0x00007f0e7c16d348 @arguments=[], @method_name=:set_nameless_name, @override_block=nil, @override_target=nil>

スキーマは以下の通りです。

app/db/schema.rb

ActiveRecord::Schema.define(version: 2019_02_24_100932) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "tasks", force: :cascade do |t| t.string "name", null: false t.text "description" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end

その他必要情報等ございましたらお申し付けください。

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

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

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

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

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

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

guest

回答1

0

  1. self.nameでなければ想定の値の取得ができないのでは。

代入メソッドやclassメソッドなど一部の例外や、同じ名前のローカル変数がある場合を除いて、メソッド呼び出しのselfは省略できます(というより、省略して書くのが普通です)。

投稿2019/02/25 22:29

maisumakun

総合スコア145183

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

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

tatsuya_055

2019/02/26 14:05 編集

ご回答ありがとうございます! いただいたご回答を参考に改めて考えてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問