Сравнение моделей Ruby on Rails - PullRequest
0 голосов
/ 11 июля 2011

У меня есть один вызов модели. Разрешения примерно для 60 столбцов, где половина столбца представляет логическое значение, а половина - текстовое поле (: строка).

Я бы хотел сравнить два разных объекта.этой модели.

Сравнение сможет представить ТОЛЬКО True значений 1-го объекта по сравнению с эквивалентными столбцами в другом объекте. Забудьте о значениях, содержащих или не содержащих текст!

Например:

Объект 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

Есть предложения?

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 июля 2011
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)
1 голос
/ 11 июля 2011

Если я правильно понимаю ваш вопрос, вы хотите иметь возможность найти записи вашего Объекта относительно другой записи. Это не так уж сложно

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 будут нужные вам записи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...