Вернуть ложное утверждение - PullRequest
0 голосов
/ 08 февраля 2012

Я новичок в RoR;Я хочу создать следующее утверждение.У меня есть массив;Я хочу, чтобы контроллер возвращал false, если все элементы массива не равны значению переменной. Это код

def check_warehouse(asset,serial)
  wh = Warehouse.where(["(asset = ? and serial = ?) OR (asset = ?) OR (serial= ?)",asset,serial,asset,serial])
  return false if wh.count > 1
  return false if
  wh.each do |wh|
    wh.position_id != session[:position_id]
  end
end

, но он не работает! Почему?

Более того, можете ли выпредложить мне плагин или гем, работающий на Rails 3.1 для генерации pdf из данных RoR?Спасибо всем

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

У вас есть этот код:

return false if wh.each do |wh|
  wh.position_id != session[:position_id]                    
end

Это не будет работать так, как вы хотите.В ruby ​​.each выполнит «блок» (код между do / end) и вернет вам исходный массив.

Так что, если массив является пустым или нет, вы говорите:

return false if []

ruby ​​не вернет false.вместо этого вы, скорее всего, предпочтете:

return false if wh.any? {|wh| wh.position_id != session[:position_id] }

Возможно, вы захотите, чтобы он возвращал true, если позиция является позицией сессии, поэтому вы можете переключиться на:

return wh.any?{|wh| wh.position_id == session[:position_id] }
2 голосов
/ 08 февраля 2012

Попробуйте что-то вроде этого:

def check_warehouse(asset,serial)
  wh = Warehouse.where(["(asset = ?) OR (serial= ?)",asset,serial]) # first condition was just extra
  return false if wh.detect {|wh| wh.position_id != session[:position_id] }
end

Я удалил return false if wh.count > 1, потому что нет смысла проверять массив, если вы возвращаете, если у него более 1 элемента. Пожалуйста, скажите мне, если я вас неправильно понял

UPD

На самом деле вы можете сделать это в БД:

def check_warehouse(asset,serial)
  Warehouse.where(
    ["(asset = ? OR serial= ?) AND NOT position_id = ?", asset, serial, session[:position_id]]
  ).count.zero?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...