class Team < ActiveRecord::Base has_many :members end class Member < ActiveRecord::Base attr_accessible :name belongs_to :team end @team.members.build(name: "zhang") @team.members.where(name: "zhang") #=> []
请问怎么回事? @doitian @Rei @jasl
@team.members.create(name: "zhang")
@team.members.build(name: "zhang").save
但是我想在 save 之前检测一下有没有‘张’这个 member? 应该这么做? @Rei @jasl
#3 楼 @simlegate 这是 validator 要做的事情呀,增加一个唯一性验证器就是了
直接 create 会判断,如果已经存在就 update,否则 save
#4 楼 @jasl 我如果想 判断 team 这个域中的 member 是否存在zhang应该怎么做?
zhang
#6 楼 @simlegate 无视 activerecord 如果让你去设计数据库你要怎么做?
#7 楼 @jasl 我正是要问这个问题!
#6 楼 @simlegate
validates :name, :uniqueness => { :scope => :team_id }
已经存在的话会创建失败。5 楼说的“否则 save”不对。
#8 楼 @simlegate 那这就不是 rails 的问题了...是对数据库的知识缺乏
但是我刚才已经给你解释过了,validator 就是干这个用的,所以你看到这个词的时候应该去翻下 rails 的 guide http://guides.rubyonrails.org/active_record_validations_callbacks.html 然后你只想让 zhang 出现一次?看右侧的 chapter,你应该能扫到 uniqueness,就是唯一的,那么这就是你应该尝试的东西了啊 http://guides.rubyonrails.org/active_record_validations_callbacks.html#uniqueness
做个 select 就能判断了。validdates 是干校验的事情,除非你的判断是校验的一部分,那样的话编写 validates。