我有兩個ActiveRecord型號,Assignment
和Instruction
。 Assignment
屬於Instruction
。導軌 - 保存記錄時自動更新外鍵
當保存一個新的分配時,我想觸發一個回調,該回調根據Assignment
中的另一個屬性在分配中插入外鍵。換句話說,如果assignment.assignment_type
= instruction.name
,請在分配中插入該指令的ID作爲主鍵。
看來你會使用Rails回調。但我不確定如何做到這一點,而不讓模型彼此交談,我收集的是一個壞主意。
編輯1
繼mjnissim的意見,下面我實現了這一點,它的工作原理:
class Assignment < ActiveRecord::Base
attr_accessible :game_type, :title, :instruction_id
belongs_to :instruction
before_save :set_instruction
private
def set_instruction
instruction = Instruction.where(:name => self.game_type).first
self.instruction = instruction
end
end
不過,我還在猶豫編寫set_instruction
方法,因爲我覺得模特不能給每個發言其他沒有打破MVC結構。但它確實好嗎?
非常誠實,我不知道它打破了哪個理論,如果它真的存在的話! ;-)我不認爲它會在任何情況下破壞MVC,並且認爲模型會與其他模型有一定程度的合作而不會相互糾纏。想想自己一會兒,試着想象不知道沒有其他物體的無菌模型......它似乎試圖保持一些神聖的原則而犧牲實用性。您也可以查看DCI和「Concerns」文件夾及其使用情況[http://www.artima.com/articles/dci_vision.html](http://www.artima.com/articles/dci_vision.html) – mjnissim