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