【问题标题】:link_to from helper来自助手的 link_to
【发布时间】:2009-10-08 20:41:32
【问题描述】:

想知道如何做到这一点。

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

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

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

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

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

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

【问题讨论】:

    标签: ruby link-to


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      如果我完全理解你的意思,你的意思是你想在你的帮助模块中调用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 %>
      

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

      【讨论】:

        【解决方案3】:

        另一种选择!如下:

        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 语句中的第二个参数,请使用您通常用于在 link_to 方法中设置 url 的内容,例如:controller =&gt; [x], :action =&gt; [y].

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

        【讨论】:

          【解决方案4】:
          <% monthlist.each do |month| %>
          
          <%= link_to month[0], your_route(month[1]) %>
          
          <% end %>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-02
            相关资源
            最近更新 更多