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"}
[値]のdoesnカスタムバリデーションとは何の関係もありません。多分あなたはテーブルの中にそれを持っていません。ポーリングオプションのみがあるので、 'question'の近くで' value'を削除してください。 – MaicolBen
ありがとうございます。それをポーリングに入れ、 'validate_amount_of_poll_options'を上に置くとうまくいっています – HashRocketSyntax
ああ、おそらく' validate'の代わりに 'validates'を入れます。あなたがそれが正しいとマークするcountの代わりに '.size'に変更すれば、それが – MaicolBen