![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Ruby on Rails 「attr_accessor」 の使い方について
こんにちは。
現在、Ruby on Railsで登録画面を作成しているのですが、attr_accessorで定義した項目に対して、validationのチェックを行うと、問題が起きてしまいました。
attr_accessorで定義した項目は、DB登録の対象ではないのですが、lengthのチェック等を行う必要があり、validates_length_of等を使って入力チェックを行っています。
問題になったのは、入力があったときだけチェックをかけたいのに、入力がなくてもチェックがかかってしまうという状態になってしまうことです。
「:if => 項目?」を書いてみると、「undefined method」のエラーがでてしまいます。
どなたか対応策の分かる方がおられましたらご教授いただけないでしょうか?
下記に実際の問題箇所のモデルクラスのソースを書いておきます。
class User < ActiveRecord::Base
attr_accessor :NEW_USER_PW ← 追加したアクセサ
# 追加したアクセサに対するチェック
validates_length_of :NEW_USER_PW, :minimum=>4, :message=>"は%d桁以上を設定してくださ
い。", :on => :update, :if => :NEW_USER_PW?
end
上記のチェック内の「: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というインスタンス変数はすべて大文字を使用されていますが、
見る人によっては定数と勘違いします。
変数であれば小文字表記を利用するほうが良いかもしれません。
ご回答ありがとうございます。
宣言さえすれば、DB項目と同じように使えるとばかり思っていました。
attr_accessorの事をそもそも理解できておらず、大変勉強になりました。
ご回答いただいた2通りのやり方のどちらでも、値が入った時のみチェックを行うということが出来ました。
また、大文字変数のご指摘、確かに紛らわしいのでよくないですね。。
まだまだ勉強が全く足りないのでもっと頑張りたいと思います。
この度はありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- JavaScript ソースコードは下の共有コードサイト「張り紙」にあります。 入力フォームの javascript で 1 2022/05/11 11:01
- JavaScript 助けてください!スパムメールがとんでもなく大量に届きます。 3 2023/08/10 16:32
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 2 2022/05/04 16:17
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
(再質問)エクセルのマクロボ...
-
教えてください
-
パソコンのスクリーンセーバー...
-
パイソンエラーについて
-
C++のCreateFile関数で、ASCII...
-
Ruby : 引数にデフォルト地を指定
-
ビーリアルのユーザー名を変え...
-
VBScriptでExcel(2019)上のデー...
-
Ruby on railsをrails sで立ち...
-
Rubyでの連立不定方程式について
-
pandasでsqlite3にテーブル作成...
-
pythonエラー
-
講義でわからないのですが以下...
-
エプソン VP-4100 印字について
-
WinSCPで画像のように puttyを...
-
英数字を含む文字列(0-9,A-Z)...
-
Beautiful Soupのインストール...
-
100万件越えCSVから条件を満た...
-
よくTwitterで見かける #プログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
教えてください。vb5.0
-
エラー「メソッドまたはデータ...
-
メソッド定義の構文のdefって
-
VBAで型が一致しないエラー(バ...
-
モジュールのメリット、デメリ...
-
.sub(/.+/,"aaaaaaa#{$&}"の置...
-
RubyでバイナリデータをIOスト...
-
try ~ catch構文が使えない
-
実行時エラー450:引数の数が一...
-
Ruby:シルバーについて
-
メソッド定義の際の引数で
-
Ruby toFormattedStringメソッ
-
A1の値をファイル名に指定した...
-
クエリーストリングとは?
-
Ruby on Rails 「attr_accessor...
-
ruby shuffleメソッド
-
RubyのDateクラスのメソッドが...
-
Csvファイルの最終行を取得する...
おすすめ情報