validate_inclusion_of使用数据库中的列表

时间:2012-07-30 15:18:42

标签: ruby-on-rails

以下是我要做的事情:

我有一个铁路模型,我们称之为物品。在db中我有一个项目列表。因此我可以做一个

item = Item.find(28)

并获取一个表示数据库中找到的项目的对象。

现在,我还有另一个模型,让我们说Order需要为其中一个字段执行validate_inclusion_of,以查看项目名称是否在Item数据库中。 像

这样的东西
validates: item_name, :presence => true
:inclusion => Item.all.name #get an array of all possible item names

可以这样做吗?最好的方法是什么?

最诚挚的问候,

0

1 个答案:

答案 0 :(得分:3)

试试这个:

validates_inclusion_of :item_name, :in => Proc.new{Item.select(:name).map(&:name)}

更新

这是一个完整的实施:

rails new shop
cd shop
rails g model item name:string
rails g model order item_name:string
rake db:migrate

现在在您的订单模型中:

class Order < ActiveRecord::Base
  attr_accessible :item_name
  validates_inclusion_of :item_name, :in => Proc.new{Item.select(:name).map(&:name)}
end

现在我们需要在控制台中测试它

rails c

并在控制台中

Item.create(name: 'book')
o = Order.new
o.valid?
=> false
o.errors
=> @messages={:item_name=>["is not included in the list"]}
o.item_name = 'book'
o.valid?
=> true