6

:needs_dist に単純な yes または no ラジオ ボタンを付けました。[いいえ] を選択してフォームを送信すると問題なく動作しますが、[はい] を選択すると検証エラーがスローされますか? :needs_dist => true の場合にのみ検証されます。

モデル

validates_presence_of :contact_name, :email, :postal_code, :series_id, :product_id, :company_name, :needs_dist

意見

<%= f.radio_button(:needs_dist, "false") %>
<%= f.label :needs_dist, "Yes" %>
<%= f.radio_button(:needs_dist, "true") %>
<%= f.label :needs_dist, "No" %>

コントローラー(念のため)

def create_quote
    @quote_request = QuoteRequest.new safe_quote_params

    if @quote_request.save
      @email = SiteMailer.quote_request(@quote_request).deliver
      render :template => "request/quote_sent"
    else
      @series = Series.find params[:quote_request][:series_id] unless params[:quote_request][:series_id].blank?
       render :template => "request/quote.html"
    end
  end
4

3 に答える 3

9

私が見つけた true false のより良い検証は、包含です。したがって、検証は次のようになります。

  validates :needs_dist, inclusion: [true, false]
于 2013-10-01T15:18:00.490 に答える
3

モデルでは、:need_dist属性が存在する必要があることを定義します。別名 not false、 not ですnil

「はい」ラジオボタンに「偽」の値を割り当てたため、この検証は失敗します。

更新: あなたが望むことを達成する別の方法を見つけました。ここに解決策を書きまし た。

validates :needs_dist, :presence => { :if => 'needs_dist.nil?' }
于 2013-10-01T15:16:29.483 に答える
0

true と false に 1 と 0 を使用することもできますが、ブール値ではなく整数で比較する必要があります (Ruby では 0 == true であるため)。私はバターカップの答えが本当に好きです。ただし、Lazaru のソリューションを使用すると思います。

<%= f.radio_button :needs_dist, 0 %>
<%= f.radio_button :needs_dist, 1 %>
于 2015-09-04T00:22:26.070 に答える