Ruby on rails 在两个不同的数据库中,遇到ActiveRecord的关系问题时,会出现很多问题

Ruby on rails 在两个不同的数据库中,遇到ActiveRecord的关系问题时,会出现很多问题,ruby-on-rails,activerecord,has-many-through,ruby-on-rails-4.2,Ruby On Rails,Activerecord,Has Many Through,Ruby On Rails 4.2,我试图建立一个有很多:通过两个不同数据库的关系,遇到一个问题 我的模型如下: 公司: 我试着使用has\u many:through的不同选项(比如设置source:'company'),但不知道如何实现这一点 谢谢,当为的连接模型命名时,有许多通过:关联(或通常具有复合名称的模型),您应该遵循单数单数形式的模型和单数形式的表。因此,您应该将模型命名为CompanyCustomPlan和表company\u custom\u plans。这不同于has\u和\u属于\u many 例如: cla

我试图建立一个
有很多:通过两个不同数据库的
关系,遇到一个问题

我的模型如下:

公司:

我试着使用has\u many:through的不同选项(比如设置
source:'company'
),但不知道如何实现这一点


谢谢,

当为
的连接模型命名时,有许多通过:
关联(或通常具有复合名称的模型),您应该遵循
单数单数形式的模型和
单数形式的表。因此,您应该将模型命名为
CompanyCustomPlan
和表
company\u custom\u plans
。这不同于
has\u和\u属于\u many

例如:

class User
  has_many :user_courses
  has_many :courses, though: :user_courses
end

class Course
  has_many :user_courses
  has_many :users, though: :user_courses
end

class UserCourse
  belongs_to :user
  belongs_to :course
end
这将正确地将关联映射到UserCourse类。如果我们使用了
has\u many:users\u courses
我们会得到
name错误:未初始化的常量users::courses
,因为ActiveRecord从关联中派生类名的方式-复数单词被解释为模块

当然,您可以通过提供
class\u name
选项来覆盖这一点,但首先遵循约定可能是一个更好的主意,除非您有充分的理由不这样做


当然,如果有更好地描述域的内容,您可以使用完全不同的名称作为连接模型-例如
Enrollment
,而不是
UserCourse

当为
的连接模型命名时,通过:
关联(或通常具有复合名称的模型),对于模型和表,应遵循
单数
的格式。因此,您应该将模型命名为
CompanyCustomPlan
和表
company\u custom\u plans
。这不同于
has\u和\u属于\u many

例如:

class User
  has_many :user_courses
  has_many :courses, though: :user_courses
end

class Course
  has_many :user_courses
  has_many :users, though: :user_courses
end

class UserCourse
  belongs_to :user
  belongs_to :course
end
这将正确地将关联映射到UserCourse类。如果我们使用了
has\u many:users\u courses
我们会得到
name错误:未初始化的常量users::courses
,因为ActiveRecord从关联中派生类名的方式-复数单词被解释为模块

当然,您可以通过提供
class\u name
选项来覆盖这一点,但首先遵循约定可能是一个更好的主意,除非您有充分的理由不这样做


当然,如果有更好地描述域的内容,您可以使用完全不同的名称作为连接模型-例如
Enrollment
,而不是
UserCourse

我最终想出了如何强制
has\u many:通过
使用正确的数据库

class CompanyCustomPlan
我终于想出了如何强制
有很多:通过
使用正确的数据库

class CompanyCustomPlan
您可以发布为
公司.自定义计划和
自定义计划.公司生成的SQL语句吗
您可以发布为
公司.自定义计划和
自定义计划.公司生成的SQL语句吗
?谢谢,但不是这样。我忘了提到两个模型存在于两个不同的数据库中,因此更新了问题,我还按照您的建议对模型进行了奇异化!谢谢,但不是这样。我忘了提到两个模型存在于两个不同的数据库中,因此更新了问题,我还按照您的建议对模型进行了奇异化!
# this model lives in other_app_db
class CompanyCustomPlan < ActiveRecord::Base
  belongs_to :custom_plan
  belongs_to :company
end

### Schema ###
#  create_table "company_custom_plans", force: :cascade do |t|
#    t.integer "company_id",     limit: 4, null: false
#    t.integer "custom_plan_id", limit: 4, null: false
#  end
ccp = CompanyCustomPlan.create!(company: company, custom_plan: custom_plan)
company.company_custom_plans == [ccp] # true
company.custom_plans == [custom_plan] # true
custom_plan.company_custom_plans == [ccp] # true

custom_plan.companies # error
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'main_db.company_custom_plans' doesn't exist: SHOW FULL FIELDS FROM `company_custom_plans`
class User
  has_many :user_courses
  has_many :courses, though: :user_courses
end

class Course
  has_many :user_courses
  has_many :users, though: :user_courses
end

class UserCourse
  belongs_to :user
  belongs_to :course
end
class CompanyCustomPlan < ActiveRecord::Base

  self.table_name = "#{ActiveRecord::Base.connection.current_database}.company_custom_plans"

  belongs_to :custom_plan
  belongs_to :company
end