我在一個名爲edit_privileges
的rails應用程序中有一個關係表,其中User
是「編輯器」,其他一些類是「可編輯的」。假設其中兩個類是Message
和Comment
。Rails中的多態關係表查詢 - 通過多個查找對象
我EditPrivilege
模型使用下面的代碼:
belongs_to :editor, :class_name => "User"
belongs_to :editable, :polymorphic => true
而且User
,當然
has_many :edit_privileges, :foreign_key => "editor_id"
的爲了確定用戶是否具有一定的模型編輯權限,我不能做正常的查詢:
user.edit_privileges.find_by_editable_id(@message.id)
因爲如果用戶哈s編輯權限編輯與@message
具有相同標識的註釋時,查詢將返回true,表中的編輯權限記錄錯誤。
於是,我試着做以下選項:
user.edit_privileges.find(:all, :conditions => ["editable_id = ? AND editable_type ?", @message.id, @message.class.to_s])
user.edit_privileges.where(:editable_id => @message.id, :editable_type => @message.class.to_s)
其作品在尋找合適的戰績不錯,但(如果沒有編輯權限的空數組[]
)返回一個數組,而不是一個對象。如果我試圖創建一種方法來銷燬編輯權限,這尤其成問題,因爲您無法在數組上傳遞.destroy
。
我想追加.first
到上述兩個解決方案返回的第一個對象和nil
如果查詢的結果是空的,但這真的是最好的辦法嗎?這樣做有什麼問題嗎? (如,而不是使用動態的,基於屬性的發現者像find_by_editabe_id_and_editable_type
)
[]是不是亂碼,但陣列。如果要對數組(集合)執行批處理操作,例如,如果要銷燬數組中的所有記錄,可以使用'users.map(&:destroy)'。 –