ruby-on-rails – Activerecord协会问题:获得has_many:通过工作

ruby-on-rails – Activerecord协会问题:获得has_many:通过工作,第1张

概述我正在 Ruby on Rails中构建一个应用程序,我将包括我的3个模型(及其迁移脚本),以显示我正在尝试做什么,以及什么不起作用.这是纲要:我的应用程序中的用户属于团队,每个团队可以有多个教练.我希望能够提取适用于用户的教练列表. 例如,用户A可以属于T1和T2队. T1和T2队可以分别有四个不同的教练,一个教练是共同的.我希望能够通过简单地说: u = User.find(1)coache 我正在 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  endendclass CreateTeams < ActiveRecord::Migration  def self.up    create_table :teams do |t|      t.column :name,:string    end  end  def self.down    drop_table :teams  endendclass 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  endend

以下是模型(不是整个文件):

class User < ActiveRecord::Base  has_and_belongs_to_many :teams  has_many :coaches,:through => :teamsclass Team < ActiveRecord::Base  has_many :coaches  has_and_belongs_to_many :usersclass Coach < ActiveRecord::Base  belongs_to :teamsend

当我试图拉扯教练时会发生这种情况:

u = User.find(1)=> #<User ID: 1,firstname: "Dan",lastname: "Wolchonok">>> u.coachesActiveRecord::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
总结

以上是内存溢出为你收集整理的ruby-on-rails – Activerecord协会问题:获得has_many:通过工作全部内容,希望文章能够帮你解决ruby-on-rails – Activerecord协会问题:获得has_many:通过工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存