2017-05-26 19 views
0

私はアプリ(Rails 5)で作業していましたが、ユーザーが選択した属性(サーバー)が必要な範囲にあるかどうかを確認したかったのです。モデルのレンダリング条件付き検証

class Player < ApplicationRecord 
    validates :nick, presence: true, length: { maximum: 20 } 
    validates :description, length: { maximum: 275 } 
    validates :server, presence: true, if: server_exists? 

    def server_exists? 
    server == "NA" 
    end 

end 

私はlocalhosにアクセスしよう:3000私は次のエラーを取得する:

undefined method `server_exists?' for Player (call 'Player.connection' to establish a connection):Class

誰もがそれを修正する方法を知っていますか?

ありがとうございます!

答えて

2

You can associate the :if and :unless options with a symbol corresponding to the name of a method that will get called right before validation happens.

代わり:server_exists?server_exists?で試してみてください:

validates :server, presence: true, if: :server_exists? 
+0

理由*この問題が発生した*上の精緻化を考えてみましょう特に、それは自己です。 (ここには存在しないClassModelとして直接呼び出されています) –

+0

ありがとう!私は ":"が使われていないときにこのエラーがなぜ起こるかについて調べます。 – Matheus

+0

あなたも大歓迎です!['ActiveModel :: Validations#validates'](https://github.com/rails/rails/blob/cdb9d7f481a6b299cd53a0f647397da60d806a21/activemodel/lib/active_model/validations)を見てください。 /validates.rb#L104)を使用して、どのように動作するかを確認します。 –