2017-03-21 10 views
0

私は投票を作成するform_forを持っています。投票には、多くのpoll_optionsがネストされた属性として選択肢として用意されています。Railsはネストされたフィールドの数を確認します

質問 - poll_optionsの数を確認するにはどうすればよいですか? 1つの選択肢だけで投票するのは意味がありません。ここで

は私のモデルである:ここでは

class PollOption < ApplicationRecord 
    belongs_to :poll 
    has_many :poll_responses 
    accepts_nested_attributes_for :poll_options, 
    reject_if: proc { |attributes| attributes['value'].blank? }, 
    allow_destroy: true 

    validates :poll_options, length: { 
    minimum: 1, too_short: "must be at least 2.", 
    maximum: 5, too_long: "can be 5 at most." 
    } 

が私の見解です:

<%= f.fields_for :poll_options do |poll_option| %> 
    <%= render 'poll_option_fields', f: poll_option %> 
<% end %> 

私はビューで私のレンダリングラインに関連していますエラー:

exception reentered 

私もこの検証を試みましたが、どちらもうまくいかず、エラーも発生しませんでした:

def validates(value) 
    if value.count < 1 
     errors.add(:base, "must have at least 2 choices.") 
    end 
    end 

UPDATE:ここに私のリクエストパラメータは次のとおりです。

{"utf8"=>"✓", "authenticity_token"=>"6h+wZ+RUAOIp8iXFX0V9t0MSxTGtFHpe7PZS3fJeF3JejaIbAm2jidLyg0qYII26NYX+F1BH6FHWNCFJ7nzymQ==", "poll"=>{"user_id"=>"2", "active"=>"true", "question"=>"Example - Which of these do you like best?", "poll_options_attributes"=>{"0"=>{"value"=>"a", "_destroy"=>"0"}, "1"=>{"value"=>"b", "_destroy"=>"0"}, "2"=>{"value"=>"c", "_destroy"=>"0"}, "3"=>{"value"=>"", "_destroy"=>"0"}}}, "commit"=>"Save Poll", "controller"=>"polls", "action"=>"create"} 

答えて

1

あなたが投票モデルで検証する必要があり、あなたがこのようなPollにカスタム検証を追加することができます。

def validates_amount_of_polls 
    if poll_options.size < 2 
    errors.add(:base, "must have at least 2 choices") 
    end 
end 
+0

[値]のdoesnカスタムバリデーションとは何の関係もありません。多分あなたはテーブルの中にそれを持っていません。ポーリングオプションのみがあるので、 'question'の近くで' value'を削除してください。 – MaicolBen

+0

ありがとうございます。それをポーリングに入れ、 'validate_amount_of_poll_options'を上に置くとうまくいっています – HashRocketSyntax

+0

ああ、おそらく' validate'の代わりに 'validates'を入れます。あなたがそれが正しいとマークするcountの代わりに '.size'に変更すれば、それが – MaicolBen

関連する問題