2009-10-08 4 views
0

Подумайте, как это сделать.link_to от помощника

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

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

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

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

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

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

ответ

0
<% monthlist.each do |month| %> 

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

<% end %> 
0

Если я вас понимаю полностью, вы имеете в виду, что вы хотите вызвать метод 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

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

Сделайте объект 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-страницу.

1

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

на ваш взгляд

<%= your_helper(self, other_params) %> 

. .

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

def your_helper(view, other_params) 
    do_something_with_params 
    view.raw view.link_to(.... link to params) 
end