Создание оператора if внутри хеша в модели - PullRequest
0 голосов
/ 21 мая 2009

Я пытаюсь отобразить всех жителей в формате PDF и их иждивенцев, но у иждивенцев нет позиции, которую они идентифицируют внешним ключом user_id резидента. например, resident1.id = 5 --- depen3.user_id = 5 означает, что зависимый3 принадлежит резиденту1, и поэтому, если я хочу отобразить зависимый стенд, что мне делать, и я хотел бы отобразить всех жителей и их иждивенцев, а также информацию о стенде чтобы иждивенцы были информацией о стенде резидента, к которому принадлежит иждивенец. теперь моя информация должна быть внутри хеша, чтобы он мог сгенерировать мой pdf файл ..

мой код

данные = [] с = 1 резиденты. каждый делает | r | data << {"Fullname" => r.firstname, "Lastname" => r.lastname, "Street-Number" => r.stand.street_no, "street Name" => r.stand.streetname}, если r. стенд || r.user_id = r.id конец

помните, что мои иждивенцы и резиденты находятся в одной таблице, но у резидентов нет ключа fore_ user_id, только у зависимого.

и мой вывод отображает только информацию о тех жителях, которые стоят, а не о иждивенцах.

Пожалуйста, кто-нибудь, кто хочет помочь. Потому что я не знаю, смогу ли я, но оператор if внутри хеша вроде:

резидентов. Каждый делает | r | data << {"Fullname" => r.firstname, "Lastname" => r.lastname}, если r.stand || r.user_id = r.id {"Street-Number" => r.stand.street_no, "Street Name" => r.stand.streetname}

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Предполагая, что .stand.street_no и т. Д. Допустимы, даже если .stand равно false (поскольку оно может быть false и все равно вызываться, если часть r.user_id == r.id имеет значение true), тогда будет работать следующее:

data = residents.map do |r|
  hash = { "Fullname" => r.firstname, "Lastname" => r.lastname }
  hash.merge!({ "Street-Number" => r.stand.street_no, "street Name" => r.stand.streetname}) if r.stand || r.user_id == r.id
  hash
end

Пояснение:

  1. Выполните итерацию по каждому резидентному объекту и создайте хеш, содержащий значения, которые, как мы знаем, будут использоваться.
  2. Условно merge! в дополнительных ключах, если условие if истинно.
  3. Вернуть хеш.

Выполнение этого в map избавляет от необходимости предварительно определять массив data и не передавать хэш при каждом проходе по циклу.

0 голосов
/ 21 мая 2009
data = []
residents.each do |r|
  tmp_hash = {"Fullname" => r.firstname, "Lastname" => r.lastname}

  if r.stand || r.user_id = r.id
    tmp_hash.merge({"Street-Number" => r.stand.street_no, "street Name" => r.stand.streetname})
  end

  data << tmp_hash

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