• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ruby on Rails 「attr_accessor」 の使い方に)

Ruby on Railsのattr_accessorの使い方についての問題と対応策

このQ&Aのポイント
  • Ruby on Railsでattr_accessorで定義した項目に対して、validationのチェックを行う場合、入力がないときにチェックがかかってしまう問題が発生しています。
  • 現在、問題が起きているモデルクラスのソースコードを示しました。
  • 対応策として、「:if => :NEW_USER_PW?」の箇所を修正することで入力がないときにチェックが行われないようにすることができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

attr_accessor :NEW_USER_PWを定義したからといって、 NEW_USER_PW?メソッドが定義されるわけではりません。 attr_accessorはゲッターとセッターメソッドを作るだけです。 それ以外の論理値を返すようなメソッドは自作しなければなりません。 NEW_USER_PW?メソッドを作成されていないのなら、「undefined method」が 出てしまうのは当然です。 質問にあるように、「入力があった場合のみ」とありますので、 NEW_USER_PW?メソッドを下記のように実装すればチェック可能です。 def NEW_USER_PW? @NEW_USER_PW.size > 0 end また、ifにはprocオブジェクトを渡すこともできますので、 :if => Proc.new{|u| u.NEW_USER_PW.size > 0} と書いてもいいでしょう。 NEW_USER_PWというインスタンス変数はすべて大文字を使用されていますが、 見る人によっては定数と勘違いします。 変数であれば小文字表記を利用するほうが良いかもしれません。

moyashi_1
質問者

お礼

ご回答ありがとうございます。 宣言さえすれば、DB項目と同じように使えるとばかり思っていました。 attr_accessorの事をそもそも理解できておらず、大変勉強になりました。 ご回答いただいた2通りのやり方のどちらでも、値が入った時のみチェックを行うということが出来ました。 また、大文字変数のご指摘、確かに紛らわしいのでよくないですね。。 まだまだ勉強が全く足りないのでもっと頑張りたいと思います。 この度はありがとうございました。

専門家に質問してみよう