link_to от помощника - PullRequest
       30

link_to от помощника

0 голосов
/ 09 октября 2009

Хотите знать, как это сделать.

У меня есть помощник по месяцам, и я хочу отобразить список каждого месяца.

Если щелкнуть месяц, он передаст числовое значение. Я хочу создать такой список

Choose a month
January - February - March - April - May.....

Это ссылки. Мой помощник выглядит так.

 MONTHLIST =  [
  [ "January", "1" ],
  [ "February", "2" ],
  [ "March", "3" ] 
  ].freeze

Как использовать link_to, чтобы получить имена и ссылки, которые будут значением. т. е. № 3 на март.

Ответы [ 4 ]

1 голос
/ 01 декабря 2010

Вот простой подход: передать представление помощнику

по вашему мнению

<%= your_helper(self, other_params) %>

. .

в вашем помощнике

def your_helper(view, other_params)
    do_something_with_params
    view.raw view.link_to(.... link to params)
end
0 голосов
/ 26 ноября 2010

Если я вас полностью понимаю, вы имеете в виду, что хотите вызвать метод link_to в своем вспомогательном модуле, верно? Затем вспомогательный метод, когда вызывается, вернет результат метода link_to в любое представление, вызвавшее его.

Если это то, что вы хотите, я сталкиваюсь с подобной проблемой, поскольку вспомогательный модуль не может получить доступ к методу link_to, кроме как через экземпляр ActionView::Helpers::URLHelper, который был создан в ответ на ваш запрос на обслуживание. Я предполагаю, что к этому объекту можно получить доступ через системную переменную Rails, но я не знаю, что это может быть. Мысли?

Что касается interrim, мой ответ - использовать метод link_to только в вашем файле просмотра. Ваш вспомогательный файл будет выглядеть примерно так:

module MyHelper
  def MyHelper.my_helper_method
    MONTHLIST =  [ [ "January", "1" ],  [ "February", "2" ],  [ "March", "3" ]   ].freeze
  end
end

Тогда ваш файл вида будет вызывать вспомогательный метод следующим образом:

<% require '[path to helper file]' %>
<% months = MyHelper.my_helper_method %>
<% months.each do |month_name, month_num| %>
  <%= link_to(month_name, month_num) %>
<% end %>

(Да, это был, вероятно, более подробный код, чем вам нужно. Его можно было сократить).

0 голосов
/ 27 ноября 2010

Альтернатива! Здесь идет:

Создайте объект Proc из метода link_to, затем передайте его от вашего представления помощнику в качестве аргумента. Вот как это будет выглядеть ...

Ваш файл просмотра:

<% require 'app/helpers/myhelper.rb' %>
<% proc_object = Proc.new( { |anchor_text, args| link_to(anchor_text, args) } )
<%= MyHelper.my_helper_method(proc_object) %>

Ваш вспомогательный файл:

module MyHelper
  def my_helper_method(proc_object)
    months.each do |name, num|
      proc.call(name, :action => 'show', :id => num)
    end
  end
end

Для второго аргумента в вашем выражении proc.call используйте то, что вы обычно используете для установки URL-адреса в вашем методе link_to, например. :controller => [x], :action => [y].

Напомним, что вы делаете Proc, который оборачивает ваш метод, а затем отправляет этот обернутый метод вашему помощнику, который вернет HTML-код вашей гиперссылки, который ваш файл .html.erb напечатает в ваш html. стр.

0 голосов
/ 10 октября 2009
<% monthlist.each do |month| %>

<%= link_to month[0], your_route(month[1]) %>

<% end %>
...