2017-06-29 31 views
0

ArgumentError: Unknown key: :uniqueness. Valid keys are: :class_name, :anonymous_class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type, :index_errorsRails的5:引发ArgumentError:未知键:唯一

class League < ActiveRecord::Base 
    validates :user_id, presence: true 
    has_one :user 
    has_many :teams, uniqueness: { 
    scope: [:user_id], 
    message: 'You can only create one team per league' 
    } 
end 

有在中甲联赛多支球队,但球队必须有一个独特的USER_ID。

create_table "leagues", force: :cascade do |t| 
    t.integer "user_id" 
    t.string "name" 
    t.string "key" 
    t.index ["user_id"], name: "index_leagues_on_user_id" 
end 

create_table "teams", force: :cascade do |t| 
    t.integer "user_id" 
    t.string "name" 
    t.string "players" 
    t.integer "league_id" 
    t.index ["league_id"], name: "index_teams_on_league_id" 
    t.index ["user_id"], name: "index_teams_on_user_id" 
end 

validates :user_id, presence: truehas_one :user是关于谁创造了联盟的用户。

回答

0

ArgumentError: Unknown key: :uniqueness. Valid keys are: :class_name, :anonymous_class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type, :index_errors

错误说明了一切!您正在向has_many关联传递无效的密钥uniqueness)。我相信你正在尝试做一个唯一性验证,而不是把它混合在一个has_many关联。我建议你阅读这些Guides

+1

只是一个说明,只有轨唯一性验证并不总是足够的。它让您打开竞争条件,其中2个近乎同步的请求创建相同的数据(最终用户点击提交2次)都被添加。标准做法是对唯一性进行轨道验证和数据库验证。 [此链接](https://rietta.com/blog/2015/05/04/validates-uniqueness-race-condition-in-ruby-on-rails/)更详细地解释了这是怎么发生的以及如何设置它up –

+0

@MichaelGorman是的!我知道这一点。当OP找出他做错了什么的时候,这将会晚些时候!我的回答说错了什么。而已 :) – Pavan

相关问题