我正在开发一款寻宝游戏,我只是想知道我是否正确建模。有一个用户可以继续搜索的列表。这些搜索是可以自定义的模板(例如,添加/删除某些任务)。
当用户选择进行狩猎时,我称之为“旅行”。我已经阅读了关于员工的Rails指南,我相信我应该将旅行模型设置为用户和狩猎之间的连接表。这就是我在想的。
class Users
has_many :trips
has_many :hunts, :through => :trips
class Hunts
has_one :trip
has_many :users, :through => : trips
class Trip
belongs_to :users
belongs_to :hunts
然后我设置Trip表的迁移将如下所示。
def change
trip_name
user_id
hunt_id
end
我有两个问题。
更新:这是我最终做的事情。
class Users
has_many :trips
has_many :hunts, :through => trips
class Hunts
has_one :trip
has_many :users, :through => trips
class Trip
belongs_to :hunts
belongs_to :users
然后
def change
create_table :trips do |t|
t.string :trip_name
t.references :user
t.references :hunt
end
add_index :trips, :hunt_id
add_index :trips, :user_id
add_index :trips, [:hunt_id, :user_id], :unique => true
end
答案 0 :(得分:1)
我看到一些小问题:
Users
和Hunts
,除非您遇到异常情况。Hunt
可能是has_many :trips
,对吧?change
方法通常如下所示:
def change
create_table :trips do |t|
t.string :trip_name
t.references :user
t.references :hunt
end
end
在结构上,你所拥有的东西对我来说很有意义。
除此之外:我组织了adventures有时被称为寻宝者狩猎,我很高兴我不是唯一一个做这类事情的程序员!
答案 1 :(得分:1)
class Users
has_many :hunts
has_many :trips, :through => hunts
class Hunts
has_one :trip
has_many :users
class Trip
belongs_to :hunt # belongs to singular word. :)
然后,创建一个表“users_hunts”,它看起来像:
# users_hunts table, has 3 columns:
id
user_id
hunt_id
和旅行表看起来像:
# trip table , has 1 extra column:
id
hunt_id
答案 2 :(得分:1)
我会选择
class Users
has_many :trips
has_many :hunts, :through => trips
class Hunts
has_one :trip
has_many :users, :through => trips
class Trip
belongs_to :hunts
belongs_to :users
即使您不需要双向关系,它也更容易理解(imho)并且它是为未来设置的,允许用户进行许多搜索和搜寻以获得许多用户,这看起来非常可行。