来自帮助者的link_to

时间:2009-10-08 20:41:32

标签: ruby link-to

想知道如何做到这一点。

我有一个月帮手,想要每月呈现一份清单。

如果您点击月份,则会传递数字值。我想生成一个像这样的列表

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

这是链接。我的助手看起来像这样。

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

如何使用link_to获取名称和链接作为值。即行军#3。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

<% monthlist.each do |month| %>

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

<% end %>

答案 2 :(得分:0)

如果我完全理解你,你的意思是你想在助手模块中调用link_to方法,对吧?然后调用helper方法时,会将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

然后你的视图文件会调用helper方法:

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

(是的,这可能是一个比你需要的更详细的代码。它本来可以缩写。)

答案 3 :(得分: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页。