我有两个表用户和 user_new。这两个表具有相同的架构:
id INT
name VARCHAR(20)
email address VARCHAR(20)
age INT
address VARCHAR(20)
我想将这两个表映射到 Rails 模型文件中的单个模型文件 User 中。
谁能建议我在 Rails 中执行此活动的好方法。让我知道是否需要任何澄清?
我有两个表用户和 user_new。这两个表具有相同的架构:
id INT
name VARCHAR(20)
email address VARCHAR(20)
age INT
address VARCHAR(20)
我想将这两个表映射到 Rails 模型文件中的单个模型文件 User 中。
谁能建议我在 Rails 中执行此活动的好方法。让我知道是否需要任何澄清?
最好的解决方案是将您的架构更改为 STI(单表继承)。将“类型”列添加到用户,您可以创建不同的用户。使用 STI,您始终可以与一个用户对象进行交互,而不是与一个奇怪的关联。要了解 STI,请查看以下链接:
1- http://www.therailworld.com/posts/18-Single-Table-Inheritance-with-Rails
2- http://www.railscasts.com/episodes/394-sti-and-polymorphic-associations
3- http://blog.thirst.co/post/14885390861/rails-single-table-inheritance
Matherick 对我的一个问题的原始回答。
例如:
# /app/models/sports/sport.rb
class Sport < ActiveRecord::Base
# Methods, variables and constants
end
# /app/models/sports/probasketball.rb
class ProBasketball < Sport
# Methods, variables and constants
end
# /app/models/sports/profootball.rb
class ProFootball < Sport
# Methods, variables and constants
end
# /app/models/sports/baseball.rb
class Baseball < Sport
# Methods, variables and constants
end
user_new
您可以使用以下命令创建新文件app/models
:
class UserNew < ActiveRecord::Base
self.abstract_class = true
establish_connection 'other_database'
set_table_name "user_new"
end
放入database.yml
:
other_database:
adapter: mysql2
database: pudra
username: root
encoding: utf8
# use your connection params
现在你有两个模型,连接到不同的数据库。然后你可以:
UserNew.all.each do |user_new|
User.create(name: user_new.name, email: user_new.email, age: user_new.age)
end
如果这些表在一个数据库中,您只能:
class UserNew < ActiveRecord::Base
set_table_name "user_new"
end