结构如下
class User < ActiveRecord::Base
has_many :team_user_ships,:dependent => :delete_all
has_many :teams,:through => :team_user_ships
end
class Team < ActiveRecord::Base
has_many :team_user_ships,:dependent => :delete_all
has_many :users,:through => :team_user_ships
end
# Table name: team_user_ships
# team_id :integer
# user_id :integer
# role :integer
# created_at :datetime not null
# updated_at :datetime not null
# id :integer not null, primary key
# status :integer
class TeamUserShip < ActiveRecord::Base
belongs_to :user
belongs_to :team
end
中间表中有两个非 ID 字段 role,status
在学习 rails 多对多的过程中想到一下几个需求,不知道 rails 下怎么很好的处理,可能是之前用其他语言留下的后遗症,总觉得还有更合理或高效的解决方法
1、当 Urser 要登录的时候同时也选择了登录的团队信息,大家一般用什么方法取得中间表的非 ID 字段 role 和 status,如果中间表没有主键 ID 又是怎么取的?
2、当需要在 View 中列出指定 Team 中的所有 User 时也要显示出用户的 role 和 status,这样的需求,又怎么处理?在 view 中 each 时一个一个查询吗?
3、
@T=User.find_by_sql("select * from users u,team_user_ships s where u.id = s.user_id and s.team_id=xxxx")
puts @T.class
->Array
puts @T[0].class
->User
puts @T[0].role
->1
puts @T[0].status
->2
这时我对需求 2 的做法,可是不明白的是,@T[0] 明明是一个 User 类实例,而 User 中并没有 role 和 status 这两个属性或者方法,这个查询出来的@T[0].status 和@T[0].role 又是什么个情况,如果直接在控制台输出@T[0] 的到的结果中也是没有 status,role 的;另外这个时候同时查询出来了 2 个 ID 又是如何处理的呢?