私はそのようなモデルを持っています:
class Order < ActiveRecord::Base
attr_accessible :**** :phone_number, :receiver, :shipping_id, :street, :totalcost, :user_id, :zip, :use_user_data
attr_accessor :use_user_data
validates :city, :presence => {:message => I18n.t(:city_not_chosen)}
validates :zip, :presence => {:message => I18n.t(:zip_not_chosen)}
validates :street, :presence => {:message => I18n.t(:street__not_chosen)}
validates :building, :presence => {:message => I18n.t(:building_not_chosen)}
validates :phone_number, :presence => {:message => I18n.t(:phone_number_not_chosen)}
validates :receiver, :presence => {:message => I18n.t(:receiver_not_chosen)}
end
ご覧のとおり、非 db フィールド (use_user_data) であるモデルにいくつかのフィールドを設定しました - 仮想属性...
しかし、:use_user_data が false の場合、適切で適切な検証が行われますが、true の場合は検証されませんでした。
私はそうしようとします:
validates :city, :presence => {:message => I18n.t(:city_not_chosen)}, :unless => :use_user_data
など
with_options :unless => :use_user_data do |order|
order.validates :city, :presence => {:message => I18n.t(:city_not_chosen)}
end
しかし、それは私を助けません.なぜですか?
また、私のフォーム:
= form_for @order do |f|
%div
= f.label :use_user_data , "Использовать данные вашего профиля*: "
= label :use_user_data , "Да"
= f.radio_button :use_user_data, true, :required => true, :id => "use_user_data", :checked => true
= label :use_user_data , "Нет"
= f.radio_button :use_user_data, false, :required => true, :id => "dont_use_user_data"
また、私が書くとき
validates :city, :presence => {:message => I18n.t(:city_not_chosen)}, :if => :use_user_data
検証メッセージが表示されます...しかし、falseの場合にのみ行う方法は? そして、なぜ私のソリューションが機能しなかったのですか?