假设我有一个这样的模型类:
class Shoebox < ActiveRecord::Base
validates_inclusion_of :description, :in => ["small", "medium"],
:message => I18n.t("activerecord.errors.models.shoebox.with_name",
:name => name)
end
还有一些人:
en:
activerecord:
errors:
models:
shoebox:
with_name: "the description of %{name} is not in the approved list"
我创建了一个新的Shoebox:
s = Shoebox.new(:description => "large", :name => "Bob")
s.valid?
但是当我看到错误(s.errors.first.message)时,我看到了:
“Shoebox的描述不在 批准的清单“
而不是:
“鲍勃的描述不在 批准名单“
我已尝试:name => name
,:name => :name
,:name => lambda{name}
,:name => lambda{:name}
。
我尝试过创建辅助方法
def shoebox_name
name
end
并传递:name => shoebox_name
,:name => :shoebox_name
,:name => lambda{shoebox_name}
和:name => lambda {:shoebox_name}
。
如何将名称的ivar值插入到字符串中?
答案 0 :(得分:0)
尝试删除验证中的消息选项,并将您的yaml更改为:
en:
activerecord:
errors:
models:
shoebox:
description:
inclusion: "the description of %{name} is not in the approved list"
有关详细信息,请参阅http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models
答案 1 :(得分:-1)
您可以使用自定义验证方法来实现您的目标。所有列都可在自定义验证器中使用:
validate :description_in
def description_in
if !(["small", "medium"].include?(description))
errors.add(:base, "The description of #{name} is not in the approved list")
end
end
PS:经过大量的谷歌搜索后,我意识到实现自定义验证器比搜索更容易。