1

これが私がやろうとしていることです:

私はレールモデルを持っています。それをアイテムと呼びましょう。dbには、アイテムのリストがあります。したがって、私はすることができます

item = Item.find(28)

データベースで見つかったアイテムを表すオブジェクトを取得します。

ここで、別のモデルもあります。たとえば、アイテム名がアイテムデータベースにあるかどうかを確認するために、フィールドの1つに対してvalidate_inclusion_ofを実行する必要があるOrderについて説明します。何かのようなもの

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 に答える