Ruby on rails RubyonRailsActiveRecord任务属于公司&;你有很多用户吗
我是RubyonRails新手,不知道这是一个好的设置,还是有更好的配置 背景: 该系统将用于向用户分配任务,跟踪分配者,并允许多人分配任务 创建公司模型、用户模型、任务模型和用户任务模型。Ruby on rails RubyonRailsActiveRecord任务属于公司&;你有很多用户吗,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我是RubyonRails新手,不知道这是一个好的设置,还是有更好的配置 背景: 该系统将用于向用户分配任务,跟踪分配者,并允许多人分配任务 创建公司模型、用户模型、任务模型和用户任务模型。 公司级 有很多:用户 有很多:任务 用户类 属于:公司 有很多:用户任务 有多个:任务,通过::用户任务 任务类 属于:公司 有很多:用户任务 拥有多个:用户,通过::用户任务 用户任务类 属于:用户 属于:任务 *使用布尔值跟踪赋值器如果只是一个habtm表,则可能不需要UserTasks类。因此,只需为
公司级
有很多:用户
有很多:任务
用户类
属于:公司
有很多:用户任务
有多个:任务,通过::用户任务 任务类
属于:公司
有很多:用户任务
拥有多个:用户,通过::用户任务 用户任务类
属于:用户
属于:任务
*使用布尔值跟踪赋值器如果只是一个habtm表,则可能不需要UserTasks类。因此,只需为该表创建迁移,而不必添加模型。然后在
用户
中,do拥有且属于多个:任务
和在任务
中do拥有且属于多个:用户
我看到的另一件事是,公司为任务和用户都设置了。您可能有业务规则来解释为什么必须这样做,但如果没有,您可能只会说,
公司->通过::用户有许多:任务
我认为这是完美的。拥有has\u many(model1)有一个很大的优点,通过:(model2)当与has\u和\u属于\u many
关联相比较时,has\u many(model1)关联的一大优点是,您可以通过ActiveRecord查询接口(UserTask.where()
或UserTask.find\u by(user\u id:1)访问联接模型(UserTasks)
等等)。直接查询联接表有时会缩短查询时间。如果您使用has\u和\u-belien\u-to\u-many
关联,您将拥有一个数据库表,您无法在Rails中不借助SQL直接访问该表。我喜欢:has\u-many,:through
overhas\u-many\u和\u-belien\u-to\u-many
或HABTM。例如,我可以被分配两次任务,一次作为程序员,另一次作为设计师。所以我需要UserTask列上的某种“JobDescription”列,我需要UserTask表中的两行来表示我是任务中的程序员,另一行表示我是任务中的设计师
您希望编写更易于更改的软件,即使HABTM更短,您也可能在将来更改软件,就像一个人在同一任务中执行两个子任务一样。请记住,数据库中的一行是一段数据,或者“一件事”,如果这有意义的话。至少,你会得到时间戳。你说得有道理,但是如果他们需要在特定的“UserTask”上添加一个新列,该怎么办呢。例如,我可以被分配两次任务,一次作为程序员,另一次作为设计师。所以我需要UserTask列上的某种“JobDescription”列,我需要UserTask表中的两行来表示我是任务中的程序员,另一行表示我是任务中的设计师。Daryll-正确。如果只是一个habtm表,则不需要该类,但如果存储任何其他数据,则需要中间类。嗨,Brandon-我使用habtm的唯一问题是,我需要跟踪最初将任务分配给其他个人的人。此外,我同意Daryll的观点,我可能需要更新UserTask表以包含其他条件。如果我们需要从关系表中删除(激发)用户id,我将存储公司id…我们仍然希望任务存在,允许我们重新分配给其他用户。无需担心。我想我在博客上花的时间太多了,2014年的Rails看起来和2006年的Rails很相似,这太酷了。布兰登-我很欣赏这个建议。快乐编码!嘿,Raoul,当你说“你有一个数据库表,如果不使用SQL,你就无法在Rails中访问它”,你是什么意思/你能举个例子吗?这些是在现有数据库上构建Rails应用程序时使用的吗?嗨,Daryll,我的意思是,使用has\u和\u-belies\u-to\u-many
关系,您显然可以使用User.tasks
从Task
表中查询User
表,但要访问联接表,您需要运行如下SQL查询:User.find\u by\u SQL(“SELECT*FROM users-internal-join-User\u-tasks-ON-users.id=User\u-tasks.User\u-id”)
。关于一个现有的数据库,我认为应该可以放置一个has\u many:。。通过:…
在现有数据库上建立关联,只要存在联接表,并且Rails和SQL中联接模型的名称匹配即可。