如何在Ruby中包装链接?



我为我的语法无知道歉,我没有必要处理Ruby,但是有必要在ul>Li list (ul>li>a代替a)

def links_to_hashtags(hashtags = object.hashtags)
hashtags.map(&:to_s).map do |hashtag|
# XXX transitional
url = h.hashtag_page_enabled? && h.logged_out? ? h.tag_path(hashtag.downcase) : h.hashtag_friends_path(q: hashtag.downcase)
h.link_to "##{hashtag}", url, dir: h.html_dir(hashtag)
end.join(' ').html_safe
end

我试过这种方式,但它有一些语法错误:

def links_to_hashtags(hashtags = object.hashtags)
hashtags.map(&:to_s).map do |hashtag|
# XXX transitional
url = h.hashtag_page_enabled? && h.logged_out? ? h.tag_path(hashtag.downcase) : h.hashtag_friends_path(q: hashtag.downcase)
h.content_tag :ul, class: 'fancy' do
h.concat h.content_tag :li,
h.link_to "##{hashtag}", url, dir: h.html_dir(hashtag)
end.join(' ').html_safe
end   

非常感谢您的回复!

def links_to_hashtags(hashtags = object.hashtags)
h.content_tag :ul, class: 'fancy' do
hashtags.map(&:to_s).each do |hashtag|
concat h.content_tag :li do
concat link_to_hashtag(hashtag)
end
end
end  
end
def link_to_hashtag(hashtag)
# prefer if ... else over unreadably long ternary expressions
url = if h.hashtag_page_enabled? && h.logged_out? 
h.tag_path(hashtag.downcase) 
else 
h.hashtag_friends_path(q: hashtag.downcase) 
end
h.link_to ['#', hashtag].join, url, dir: h.html_dir(hashtag)
end

每个内容帮助程序(如content_tag)都创建自己的字符串缓冲区。当您在块中使用concat时,您正在写入该标记的缓冲区-就像您在ERB中使用<%=一样。这样就不需要进行笨拙的字符串连接并处理被转义的html标记。

然而,这确实是你应该考虑使用局部for代替的东西。

<ul class="fancy">
<% hashtags.each do |hashtag| %>
<li><%= link_to_hashtag(hashtag) %></li>
<% end %>
</ul>

最新更新