Rails - передача опции методу - PullRequest
6 голосов
/ 21 февраля 2011

У меня есть метод справки, который выглядит примерно так:

  def html_format(text, width=15, string="<wbr />", email_styling=false)

    if email_styling
       ...... stuff
    else
       ...... stuff
    end
       ...... stuff
  end

У меня проблемы с отправкой email_styling как true. Вот что я делаю в представлении:

<%= html_format(@comment.content, :email_styling => true) %>

Я неверно передаю истину? Спасибо

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Вы не передаете это правильно.Вам нужно сделать следующее:

<%= html_format(@comment.content, 15, '<wbr />', true) %>

В качестве альтернативы вы можете использовать хэш опций для передачи своих параметров:

def html_format(text, options = {})
  opt = {:width => 15, :string => '<wbr />', :email_styling => false}.merge(options)

  if opt[:email_styling]
    ...
  end
end

, чтобы вы могли сделать свой вызов следующим образом:

<%= html_format(@comment.content, :email_styling => true) %>
2 голосов
/ 21 февраля 2011

Ruby не имеет именованных аргументов, поэтому вызов вашего метода:

html_format(@comment.content, :email_styling => true)

На самом деле вызывает (псевдо-код):

html_format(text = @comment, width = true)

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

html_format(@comment.content, 15, '<wbr />', true)
1 голос
/ 21 февраля 2011
def html_format(text, user_options={})
  options = {
    :width => 15, 
    :string => "<wbr />", 
    :email_styling => false
  }
  options.merge!(user_options)
  if options[:email_styling]
    ...
  else
    ...
  end
  ...
end

ИСПОЛЬЗОВАНИЕ

html_format("MY TEXT", {:email_styling => true, :width => 20})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...