【发布时间】:2013-01-16 12:08:02
【问题描述】:
我有这样的模型:
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
如您所见,我在模型中设置了一些非数据库字段(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
我收到验证消息...但是如果只有假怎么办?为什么我的解决方案不起作用?
【问题讨论】:
-
与您的问题无关,但您可以使用 implicit 查找清理您的许多
:message参数:stackoverflow.com/a/2859275/23368 -
@DanielRikowski 以及如何更改.... 没有理解,删除消息?和?
-
只需按照 Rails I18n 指南中“错误消息范围”(guides.rubyonrails.org/i18n.html#error-message-scopes) 中描述的方式设置您的语言环境文件,Rails 就会自动使用它们。
标签: ruby-on-rails ruby-on-rails-3 validation model