我有這樣的模式:驗證字段只有virt_attribute是假
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是錯誤的,好的和正確的驗證,但是當真實沒有驗證?
我嘗試這樣:
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
我得到驗證消息......但是怎麼辦只有假的?爲什麼我的解決方案不起作用?
沒有,但你可以清理你許多':消息'參數使用* implict *查找:http://stackoverflow.com/a/2859275/23368 –
@DanielRikowski以及如何更改....沒有unserstand,刪除消息?和? – brabertaser19
只需在「錯誤消息範圍」(http://guides.rubyonrails.org/i18n.html#error-message-scopes)中Rails I18n指南中描述的方式設置您的語言環境文件,Rails就會自動使用它們。 –