以下是我要做的事情:
我有一个铁路模型,我们称之为物品。在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
答案 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