Ваша проблема не в проверках, а в том, что act_as_list не разрешит больше, чем список за одно отношение принадлежат.
Эта следующая проверка будет гарантировать, что карта находится в списке сброса или в колоде игрока, но не в обоих.
validates_uniqueness_of [:fields, :that, :uniquely, :describe, :a, :card],
:scope => [:player_id, :location]
Вы должны быть в состоянии использовать STI для достижения нескольких списков, которые вы хотите. Примечание: это не проверено, но должно, по крайней мере, поставить вас на правильный путь.
class Card < ActiveRecord::Base
belongs_to :player
validates_uniqueness_of [:fields, :that, :uniquely, :describe, :a, :card],
:scope => [:player_id, :location]
set_inheritance_column :location
end
class DeckCard < Card
acts_as_list, :scope => :player
end
class DiscardCard < Card
acts_as_list, :scope => :player
end
class Player
belongs_to :game
has_many :deck_cards, :order => "position",
:dependent => :delete_all
has_many :discard_cards, :order => "position",
:dependent => :delete_all
end