2011-07-10 170 views
0

我有一個模型調用大約60列的權限,其中一半的列表示一個布爾值,一半表示一個文本(:字符串)字段。比較模型Ruby on Rails

我想能夠比較這個模型的2個不同的對象。

的比較將能夠與其它物體的等效列相比呈現第一對象的ONLY值。 忘記包含或不包含文本的值!

例如:

對象1:

Permission: 
    Read_disk :true 
    Write_disk :true 
    Modify_disk :true 
    Delete_disk :true 
    Every other permission FALSE or TEXT so I do not care about them. 

對象2:

Permission: 
    Read_disk :false  (*I care about that because it was true in object 1) 
    Write_disk :false (*I care about that because it was true in object 1) 
    Modify_disk :true (*I care about that because it was true in object 1) 
    Delete_disk :true (*I care about that because it was true in object 1) 
    Every other might be TRUE or FALSE or TEXT but I do not care about them because those permissions were false in the object 1 

我認爲我想目前這種比較僅示出了真對象1及其等效字段對象2

有什麼建議嗎?

謝謝。

回答

1
class Permissions < ActiveRecord::Base 
    def compare(permission) 
    true_attributes = self.attributes.select{|k, v| v==true } 
    equivalent_attributes = permission.attributes.select{|k, v| true_attributes.key?(k) } 

    [true_attributes, equivalent_attributes] 
    end 
end 

object_1_permissions, object_2_permissions = object_1.compare(object_2) 
+0

但是最後我想返回2個對象。一個對象具有對象1的真實值。另一個具有與對象2的真實值相同的值。 – glarkou

+0

這就是它的作用。 'object_1_permissions'現在具有Object 1的真實屬性,'object_2_permissions'現在具有相同屬性的值。 – gunn

+0

您正在開玩笑:p' object_1_permissions,object_2_permissions = object_1.compare(object_2)'這條線是否會做所有的魔法?你能解釋一下嗎?因爲我是Rails新手? – glarkou

1

如果我正確理解您的問題,您希望能夠查找與另一個記錄相關的Object的記錄。這不是太難

obj = Object.find(some_id) 
conditions = Hash.new 
obj.attributes.each do |key, value| 
    if value == true 
     conditions[key] = value 
    end 
end 
interestingObjects = Object.where(conditions).all 

然後你的interestingObjects將有你想要的記錄!

+0

謝謝隊友。我認爲這是正確的。我以前的評論:我不關心對象1的虛假屬性。只有真的。另外,我不關心對象1中的屬性是否與對象2中的屬性相同。我只關心對象1中的真實屬性並返回2個對象。第一個對象將只是對象1的真實屬性。對象2將等同於對象1的真實值。 – glarkou