数据库 关于 ActiveRecord 关联关系的问题

simlegate · 2013年05月22日 · 最后由 jimrokliu 回复于 2013年05月22日 · 2663 次阅读
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.build(name: "zhang").save

但是我想在 save 之前检测一下有没有‘张’这个 member? 应该这么做? @Rei @jasl

#3 楼 @simlegate 这是 validator 要做的事情呀,增加一个唯一性验证器就是了

直接 create 会判断,如果已经存在就 update,否则 save

#4 楼 @jasl 我如果想 判断 team 这个域中的 member 是否存在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。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号