сравнивая параметры в рельсах - PullRequest
0 голосов
/ 22 января 2010

я делаю

if params[:type] = "Type A"
   # do something
end
if params[:type] = "Type B"
   # do something
end

Но я думаю, что это неправильно. Я должен использовать ==

Однако, это дает мне ошибку:

У вас есть ноль объекта, когда вы его не ожидали

Каков наилучший способ сделать это в рельсах?

Все, что я делаю, это получаю переменную переключателя из формы и выполняю логику на основе ее значения (типа A или типа B)

Ответы [ 2 ]

5 голосов
/ 22 января 2010

Преамбула

class Hash
  def try(arg)
    self[arg] rescue nil
  end
end

Твой путь

if params.try(:type) == "Type A"
    # do
elsif params.try(:type) == "Type B"
    # do
end

DRY

case params.try(:type)
when "Type A"
    # do
when "Type B"
    # do
else
    # default do
end
3 голосов
/ 22 января 2010

Вы уверены, что это должно быть params[:type]? Во-первых, проверьте свои журналы, чтобы увидеть, что находится внутри параметров, прежде чем вы получите доступ к действию в контроллере.

Для проверки нескольких вариантов вы можете использовать конструкцию переключателя:

case params[:type]
when "Type A"
  # do sth
when "Type B"
  # do sth
else # not A nor B, can be nil
  # do nothing
end

А если вам нужно глубже в параметрах, вы можете использовать if / else:

if params[:type] && params[:type][:value] == "sth"
  # do sth
elsif params[:type] && params[:type][:value] == "..."
  # do sth
end

И проверьте, откуда вы получаете ошибку, потому что в Ruby вы можете легко сравнить nil и String, так что это не из-за использования == в вашем примере.

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