2009-10-08 43 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

另一种!这里有:

link_to方法中创建一个Proc对象,然后将它从您的视图传递给助手作为参数。下面是它的外观...

您的视图文件:

<% 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语句中的第二ARG,使用你想什么通常用于在您的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