1

这是我正在尝试做的事情:

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

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

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

此致,

O。

4

1 回答 1

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
于 2012-07-30T15:29:04.043 回答