Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRailsActiveRecord任务属于公司&;你有很多用户吗_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails RubyonRailsActiveRecord任务属于公司&;你有很多用户吗

Ruby on rails RubyonRailsActiveRecord任务属于公司&;你有很多用户吗,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我是RubyonRails新手,不知道这是一个好的设置,还是有更好的配置 背景: 该系统将用于向用户分配任务,跟踪分配者,并允许多人分配任务 创建公司模型、用户模型、任务模型和用户任务模型。 公司级 有很多:用户 有很多:任务 用户类 属于:公司 有很多:用户任务 有多个:任务,通过::用户任务 任务类 属于:公司 有很多:用户任务 拥有多个:用户,通过::用户任务 用户任务类 属于:用户 属于:任务 *使用布尔值跟踪赋值器如果只是一个habtm表,则可能不需要UserTasks类。因此,只需为

我是RubyonRails新手,不知道这是一个好的设置,还是有更好的配置

背景: 该系统将用于向用户分配任务,跟踪分配者,并允许多人分配任务

创建公司模型、用户模型、任务模型和用户任务模型。
公司级
有很多:用户
有很多:任务

用户类
属于:公司
有很多:用户任务
有多个:任务,通过::用户任务

任务类
属于:公司
有很多:用户任务
拥有多个:用户,通过::用户任务

用户任务类
属于:用户
属于:任务

*使用布尔值跟踪赋值器如果只是一个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
over
has\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中联接模型的名称匹配即可。