Ruby on rails Rails:在创建过程中填充模型属性
我在用户和任务模型之间有一种多对多关系 一个任务可以有多个用户,但它应该跟踪其原始创建者(如果用户通过Ruby on rails Rails:在创建过程中填充模型属性,ruby-on-rails,many-to-many,Ruby On Rails,Many To Many,我在用户和任务模型之间有一种多对多关系 一个任务可以有多个用户,但它应该跟踪其原始创建者(如果用户通过@user.tasks.create创建一个)。我想知道我该怎么做 我必须在tasks表中创建一个名为“creator”的新列字段。然后,我可以通过以下方式初始化任务: @user.tasks.create(:creator=>@user) 是否有一种不必添加参数的方法,因为创建者始终是实例化任务的用户 谢谢 编辑 我的用户模型有: has_many :taskization has
@user.tasks.create
创建一个)。我想知道我该怎么做
我必须在tasks表中创建一个名为“creator”的新列字段。然后,我可以通过以下方式初始化任务:
@user.tasks.create(:creator=>@user)
是否有一种不必添加参数的方法,因为创建者始终是实例化任务的用户
谢谢
编辑
我的用户模型有:
has_many :taskization
has_many :tasks, :through => :taskization
has_many :taskization
has_many :users, :through => :taskization
我的任务模型有:
has_many :taskization
has_many :tasks, :through => :taskization
has_many :taskization
has_many :users, :through => :taskization
我倾向于将creator属性放在join模型中(任务化)。如果您这样做(比如说,使用此迁移)
这会让你到达你想要的地方。如果您决定creator属性所属的位置,则可以在任务模型中执行类似的回调,但我还没有完全考虑清楚。听起来您好像在指示“原始创建者”是任务的一个属性。对于每个任务记录,您希望跟踪最初创建它的用户 因此,建模似乎需要两个方面:
# return the User object of the original task creator
@original_creator_user = @task.original_creator
以及
# get all users of this task
@users = @task.users
工作
这需要任务
对象和用户
对象之间存在两种不同的关系
class User < ActiveRecord::Base
# tasks for this user
has_many :taskization
has_many :tasks, :through => :taskization
# tasks this user was the original creator of
has_many :created_tasks, :class_name => "Task"
end
class Task < ActiveRecord::Base
# users of this task
has_many :taskization
has_many :users, :through => :taskization
# user who originally created this class
belongs_to :original_creator, :class_name => "User"
end
class用户:任务化
#此用户是任务的原始创建者
已创建多个任务,:class\u name=>“任务”
结束
类任务:任务化
#最初创建此类的用户
属于:原始创建者:class\u name=>“用户”
结束
请注意,“创建者”关系不是
:通过任务,它是两个对象之间的直接关系。您可以共享您的模型代码吗?我的模型基本上只有多对多关系。。。我已经更新了问题以显示这一点。然而,这更像是一个一般性的问题,因为我一直在想如何做到这一点,而不是直接针对特定的应用程序。请注意,Kevin的回答也正好说明了创建新关联的必要性。读过这篇文章后,根据你们的提问,我认为把这个属性放在任务模型中是有意义的。要做到这一点,您只需将creator_id列添加到Tasks中,并在Task对象中设置回调(并按照Kevin的答案设置关系)。在联接模型中设置它的唯一可能的好处是,如果您希望让所有用户都处理由某某创建的任务。你必须建立另一个协会来实现这一点。太棒了-谢谢你的回答。我认为Kevin的回答与我的问题直接相关(如果我错了,请纠正我)——但从您的回答中,我了解到联接表可以保存任务和用户之间的每个关系的信息——我认为我可能在不久的将来需要这些信息。非常感谢!凯文,谢谢你的回答。快速提问,史蒂夫的答案也适用吗?有不同的方法来解决这个问题,但我认为如果你加上上面的关联就足够了。谢谢@Kevin-毫无疑问,访问creator属性需要关联,但是如果没有回调,那么在创建任务时,如果不调用类似@user.tasks.create(:creator=>@user)
的函数,该属性的值首先是如何设置的?“这一部分我不清楚。”史蒂夫罗利:有几种方法可以做到这一点。我可能会在create上进行回调,为创建记录的用户设置值。我意识到user.tasks.create没有设置原始创建者的任务。