1
我有一個模型,Game
,其中has_many :piles
。事實上,我知道每個遊戲都有4堆,每個遊戲都有不同的(在遊戲範圍內)contents
。我用於創建遊戲的網絡表單允許用戶選擇四個內容(如c_type_#)。因此,我可以在創建遊戲時填充樁。但是,我無法弄清楚如何確保我有4個獨特的樁。我的模型是這樣的:Ruby-on-Rails:驗證子對象的唯一性(或數量)
class Game < ActiveRecord::Base
has_many :piles
def after_create
1.upto(4) do |num|
piles.create("contents" => "c_type_#{num}")
end
end
end
class Pile < ActiveRecord::Base
belongs_to :game
validates_uniqueness_of :contents, :scope => "game_id"
end
...和我的移民加樁的樣子:
class CreatePiles < ActiveRecord::Migration
def self.up
create_table :piles do |t|
t.integer :game_id
t.string :contents
end
add_index :piles, [:game_id, :contents], :unique => true
end
def self.down
drop_table :piles
end
end
......但所有這意味着,非唯一樁不添加到數據庫,默默地;父母比賽最終只有不到4堆。
我現在已經解決這個具有遊戲validate :unique_pile_contents, :on => :create
,其中unique_pile_contents
驗證c_type_#值的uniq'd數組的長度是4的工作 - 但這種感覺很缺憾。有沒有更好的辦法?