我有一个模型,
Game
哪一个
has_many :piles
. 事实上,我知道每一个游戏都有4堆,每一堆都有不同的(在游戏范围内)
contents
. 我创建游戏的web表单允许用户选择四个内容(C_类型)。因此,我可以在创建游戏时填充成堆的内容。然而,我不知道如何确保我有4个独特的桩。我的模型如下:
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_u类型_u35;值的uniq'd数组的长度是否为4-但这感觉非常笨拙。有更好的方法吗?