Как я могу получить проверку «если» для использования параметров (Ruby on Rails) - PullRequest
1 голос
/ 26 октября 2009

Для условной проверки в Rails я могу сделать это:

mailed_or_faxed_agenda = Proc.new { |me| me[:agenda_mailed_faxed] }
validates_presence_of :agenda, :if=>!mailed_or_faxed_agenda

но я не знаю, как параметризировать Proc. Я хотел бы использовать if=>blah(name), но я не могу понять, как это сделать. Есть идеи?

Примечание: В этих случаях можно также использовать имя метода, но в качестве символа. Я не представляю, как передать параметры этому.

Ответы [ 2 ]

2 голосов
/ 26 октября 2009

Под "параметризацией Proc" вы подразумеваете карри?

Или только это?

my_proc = Proc.new { |chunky| do stuff to 'chunky' here }

my_proc.call("bacon") # "bacon" is "chunky" in the above proc

Вторая проблема (отправка параметров в метод), вы можете сделать что-то вроде этого:

validates_presence_of :some_column_name
  :if => Proc.new { |model_instance| model_instance.send(:some_method, arg1, arg2, arg3) }

Обновление:

Вышесказанное можно упростить, если вы не хотите параметризовать вызываемый метод. Следующее эквивалентно передаче буквального символа в send:

validates_presence_of :some_column_name
  :if => Proc.new { |model_instance| model_instance.some_method(arg1, arg2, arg3) }
1 голос
/ 26 октября 2009

На основании документации вы можете использовать процедуру в параметре: if.

validates_presence_of :agenda,
                      :if => Proc.new { |me| me[:agenda_mailed_faxed] } 

И вы также можете избежать использования этого процесса, выполнив свой метод и передав его имя в виде символа .

def mailed_or_faxed
    # Your method logic
end
validates_presence_of :agenda,
                      :if => :mailed_or_faxed

Вы не можете предоставить какой-либо параметр для тех, если. Но это не обязательно.
У вас есть доступ ко всем данным модели в методе проверки.

Например, если вы хотите проверить, что в вашей проверке указано логическое значение повестка дня_файловой в вашей проверке, отлично подойдет следующее:

validates_presence_of :agenda,
                      :if => :agenda_mailed_faxed

Ваши проверки выполняются внутри вашей модели, которая создается со всеми данными вашей формы.
Вы можете напрямую получить к ним доступ. Не нужно передавать их как параметры.

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