1

想知道如何做到这一点。

我有一个月的助手,想呈现每个月的列表。

如果您单击月份,它将传递数字值。我想制作一个这样的列表

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

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

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

如何使用 link_to 获取名称并将链接作为值。即三月的#3。

4

4 回答 4

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
于 2010-12-01T15:43:05.530 回答
0
<% monthlist.each do |month| %>

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

<% end %>
于 2009-10-09T20:52:43.267 回答
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 语句中的第二个参数,请使用您通常用于在link_to方法中设置 url 的内容,例如:controller => [x], :action => [y].

回顾一下,您正在做的是制作一个包装您的方法的 Proc,然后将该包装的方法发送给您的助手,该助手将为您的超链接返回 html 代码,您的 .html.erb 文件将打印到您的 html 页面。

于 2010-11-26T22:16:13.707 回答
0

如果我完全理解你,你的意思是你想link_to在你的帮助模块中调用该方法,对吗?然后,辅助方法在调用时会将link_to方法的结果返回给调用它的任何视图。

如果这就是您想要的,那么我正在反对类似的问题,因为辅助模块无法访问该link_to方法,除非通过为ActionView::Helpers::URLHelper响应您的服务请求而创建的实例。我假设这个对象可以通过 Rails 系统变量访问,但我不知道那可能是什么。想法?

在此期间,我的回答是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 %>

(是的,这可能是比您需要的更冗长的代码。它可以被缩写。)

于 2010-11-26T20:58:03.527 回答