Rails просмотреть вспомогательную функцию и функцию link_to - PullRequest
4 голосов
/ 12 января 2011

Я пытаюсь создать вспомогательную функцию (например, в application_helper.rb), которая генерирует link_to на основе параметров, переданных вспомогательной функции. Если бы я помещал ссылку в файл ERB, она была бы в формате:

<%= link_to 'Some Text', { :controller => 'a_controller', :action => 'an_action' } %>

В вспомогательной функции все текст, контроллер и действие передаются или вычисляются. Код в вспомогательной функции:

params = "{ :controller => '#{controller}', :action => '#{action_to_take}'}"
html   = "#{link_to some_text, params }<p />"
return html

Сгенерированная ссылка имеет правильный текст, однако параметры - это буквально содержимое строки params.

Как получить строку params для оценки (как в файле ERB)?

Ответы [ 2 ]

10 голосов
/ 12 января 2011

Я думаю, у тебя в голове слишком много вещей.Если вы не пытаетесь сделать что-то очень странное (и нецелесообразное), это сработает:

def link_helper text, controller, action
  link_to text, :controller => controller, :action => action
end

Хотя, как вы можете видеть, делать его помощником не стоит - это едва ли проще, чем его функциональностьперенос и гораздо менее гибкий.

Помощник link_to возвращает строку, поэтому его очень просто использовать так, как вы хотите:

def link_helper text
  # some helper logic:
  controller = @controller || "pages"
  action     = @action     || "index"

  # create the html string:
  html = "A link to the #{controller}##{action} action:"
  html << link_to(text, :controller => controller, :action => action)
  html # ruby does not require explicit returns
end
0 голосов
/ 12 января 2011

Вы можете просто использовать url_for helper.

link_to "Some Text", url_for (: action =>: action_name,: controller =>: controller_name)

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