2012-05-05 41 views
1

我有一個多對多用戶和任務模型之間的關係。Rails:在創建過程中填充模型屬性

任務可以有許多用戶,但應該跟蹤其原始創建者(如果用戶通過@user.tasks.create創建一個)。我想知道我該怎麼做。

我將不得不在任務表中創建一個名爲「creator」的新列字段。然後,我可以通過以下方式initalise任務:

@user.tasks.create(:creator=>@user) 

有沒有添加的參數,因爲創作者將永遠是實例化任務的用戶的一種方式。

謝謝!

編輯

我的用戶模型有:

has_many :taskization 
has_many :tasks, :through => :taskization 

我的任務模式有:

has_many :taskization 
    has_many :users, :through => :taskization 
+0

你能分享你的模特兒的代碼嗎? –

+0

我的模特基本上只有多對多的關係......我已經更新了這個問題來展示這個。然而,這更多的是一個普遍的問題,因爲我一直在想如何做一段時間 - 而不是直接針對具體應用。 – Karan

回答

1

聽起來好像你表示'original_creator'是Task的一個屬性。對於每個任務記錄,您想跟蹤哪個用戶最初創建它。

所以,這好像你將需要兩個造型:

# return the User object of the original task creator 
@original_creator_user = @task.original_creator 

以及

# get all users of this task 
@users = @task.users 

工作。

這需要Task對象與User對象之間的兩種不同關係。

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 

請注意,「創造者」的關係是不是:through任務,它是直接在兩個對象之間的關係。

+0

凱文,謝謝你的回答。快速的問題,史蒂夫的答案也適用? – Karan

+0

有不同的方法來處理這個問題,但我認爲如果你添加上面的關聯就足夠了。謝謝! –

+1

@Kevin - 毫無疑問,這些關聯是訪​​問創建者屬性所必需的,但是如果沒有回調,那麼該屬性的值如何設置,而不用像'@ user.tasks.create(:creator => @用戶)'創建任務時?那部分對我來說並不清楚。 –

2

我傾向於把在連接模式(Taskization)創建者屬性。如果你這樣做(比如,與此遷移),

class AddCreatorIdToTaskizations < ActiveRecord::Migration 
    def change 
    add_column :taskizations, :creator_id, :integer 
    end 
end 

可以再加入一個回調taskization.rb

before_create do |taskization| 
    taskization.creator_id = taskization.user_id 
end 

您想要得到您。如果您決定創建者屬性屬於哪個屬性,那麼您可以在任務模型中執行類似的回調,但我沒有完全想到這一點。

+0

請注意,凱文的答案是關於是否需要創建一個新的協會。讀完之後,根據你的要求,我認爲把這個屬性放在任務模型中是有意義的。要做到這一點,只需將creator_id列添加到Tasks中,並在Task對象中設置回調(並根據Kevin的回答設置關係)。 在連接模型中設置它的唯一可能的好處是,如果您希望讓所有用戶都能處理由某某創建的任務。你必須建立另一個關聯來啓用它。 –

+0

輝煌 - 感謝您的回答。我認爲凱文的答案與我的問題直接相關(糾正我,如果我錯了) - 但從你的答案我知道,連接表可以保留任務和用戶之間的每個關係的信息 - 我想我可能需要在不久的將來。謝謝一堆! – Karan