ただ今、「現場で使える 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
疑問点は以下となります。
self.name
でなければ想定の値の取得ができないのでは。- ブラウザからの動作確認時に、nameに値が入るよう入力した際に、
binding.pry
をself.name = '名前なし' if name.blank?
の前に入れて、name
の値を確認した際はnil
となっているのに、なぜself.name = '名前なし'
の処理が走らないか。 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
その他必要情報等ございましたらお申し付けください。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/26 14:05 編集