ruby-on-rails – Activerecord协会问题:获得has_many:通过工
发布时间:2020-12-17 02:50:03 所属栏目:百科 来源:网络整理
导读:我正在 Ruby on Rails中构建一个应用程序,我将包括我的3个模型(及其迁移脚本),以显示我正在尝试做什么,以及什么不起作用.这是纲要:我的应用程序中的用户属于团队,每个团队可以有多个教练.我希望能够提取适用于用户的教练列表. 例如,用户A可以属于T1和T2队.
我正在
Ruby on Rails中构建一个应用程序,我将包括我的3个模型(及其迁移脚本),以显示我正在尝试做什么,以及什么不起作用.这是纲要:我的应用程序中的用户属于团队,每个团队可以有多个教练.我希望能够提取适用于用户的教练列表.
例如,用户A可以属于T1和T2队. T1和T2队可以分别有四个不同的教练,一个教练是共同的.我希望能够通过简单地说: u = User.find(1) coaches = u.coaches 以下是我的迁移脚本以及模型中的关联.我在设计中做错了吗?我的协会是否正确? class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.column :login,:string,:default => nil t.column :firstname,:default => nil t.column :lastname,:default => nil t.column :password,:default => nil t.column :security_token,:default => nil t.column :token_expires,:datetime,:default => nil t.column :legacy_password,:default => nil end end def self.down drop_table :users end end class CreateTeams < ActiveRecord::Migration def self.up create_table :teams do |t| t.column :name,:string end end def self.down drop_table :teams end end class TeamsUsers < ActiveRecord::Migration def self.up create_table :teams_users,:id => false do |t| t.column :team_id,:integer t.column :user_id,:integer t.column :joined_date,:datetime end end def self.down drop_table :teams_users end end 以下是模型(不是整个文件): class User < ActiveRecord::Base has_and_belongs_to_many :teams has_many :coaches,:through => :teams class Team < ActiveRecord::Base has_many :coaches has_and_belongs_to_many :users class Coach < ActiveRecord::Base belongs_to :teams end 当我试图拉扯教练时会发生这种情况: u = User.find(1) => #<User id: 1,firstname: "Dan",lastname: "Wolchonok"> >> u.coaches ActiveRecord::StatementInvalid: Mysql::Error: #42S22Unknown column 'teams.user_id' in 'where clause': SELECT `coaches`.* FROM `coaches` INNER JOIN teams ON coaches.team_id = teams.id WHERE ((`teams`.user_id = 1)) 这是sql中的错误: Mysql ::错误:#42S22Unknown列’teams.user_id’在’where子句’中:SELECT coaches.* FROM教练INNER JOIN团队ON coaches.team_id = teams.id WHERE((teams.user_id = 1)) 我错过了我的:through子句吗?我的设计完全关闭了吗?有人能指出我正确的方向吗? 解决方法
你不能连续两次做一个has_many:它会告诉你它是一个无效的关联.如果你不想像上面那样添加finder_sql,你可以添加一个模仿你想要做的事情的方法.
def coaches self.teams.collect do |team| team.coaches end.flatten.uniq end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |