想知道如何做到这一点。
我有一个月帮手,想要每月呈现一份清单。
如果您点击月份,则会传递数字值。我想生成一个像这样的列表
Choose a month
January - February - March - April - May.....
这是链接。我的助手看起来像这样。
MONTHLIST = [
[ "January", "1" ],
[ "February", "2" ],
[ "March", "3" ]
].freeze
如何使用link_to获取名称和链接作为值。即行军#3。
答案 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页。