我有部分:
<% if title_top.any? %>
<% title_top.each do |country| %>
<li><%= link_to country.title, country%></li>
<% end %>
<li class="divider"></li>
<% end %>
它工作正常并生成带链接的列表标签,但我想用帮助器替换它:
def link_to_list(var)
if var.any?
var.each do |country|
content_tag :li do
link_to(country.title, country)
if var.first.top?
content_tag(:li, class: "divider")
end
end
end
end
end
参数的国家/地区数组:
def title_top
@country_top = Country.where(top: true)
end
帮助器不起作用,在控制台中它给了我:
ArgumentError: arguments passed to url_for can't be handled. Please require routes or provide your own implementation
我错了,请帮忙...我可以放弃它,但我的大脑很快就会爆炸,因为我找不到合适的解决方案
感谢juanpastas , 对我来说,正确答案是:
def link_to_list(var)
out = ''
devider ="<li class='divider'></li>" #divider for bootstrap menu
var.each do |country|
out += content_tag :li do #list item with links inside
link_to country.title, country
end
end
var.first.top ? (out << devider).html_safe : out.html_safe #divide upper menu links from other links
end
(但我仍然无法理解为什么以前的方法不起作用)
答案 0 :(得分:0)
这就是我在评论中的意思
out = ''
var.each do |country|
out += content_tag :li do
out1 = link_to 'blah', 'route'
if something
out1 += content_tag :li
end
out1
end
end
out
答案 1 :(得分:0)
要使用控制台中的路径助手调用辅助方法,您应该执行以下操作:
irb(main):006:0* include Rails.application.routes.url_helpers
=> Object
irb(main):007:0> ApplicationController.helpers.bogus(Thing.first)
Thing Load (1.0ms) SELECT "things".* FROM "things" LIMIT 1
=> "<li><a href=\"/things/2\">Thing</a></li>"
接下来,你的助手不会给你你想要的东西。正如juanpastas所说,你需要连接content_tag
的输出。我这样做(注意这相当于你的初始部分代码,而不是帮助者):
def link_to_list(list)
html = ""
unless list.empty?
html += list.map { |item| content_tag(:li, link_to(item.title, item)) }.join.html_safe
html += content_tag(:li, :class => "divider")
end
html
end