1

Extreme Ruby/Rails 新手在这里:我正在尝试为块中包含的每个单独的帖子链接到搜索操作:

<% split_tags = post.tags.split(',') %> # returns ["food", "computers", "health"] %>
<p>Keywords: <%= split_tags.each {|tag| link_to(tag, front_search_tag_path(:tag => tag))}) %></p>

但它返回的只是Keywords: ["food", "computers", "health"]. .each 不应该遍历数组并以标签作为参数提供到每个 search_tag_path 的链接吗?

4

3 回答 3

4

不,#each 只是执行一个块,它不累积任何数据。

[1, 2, 3].each{ |n| "Link to item #{n}" } #=> [1, 2, 3]

你有两个选择,使用 map 来积累数据:

[1, 2, 3].map{ |n| "Link to item #{n}" }.join("\n") #=> "Link to item 1\nLink to item 2\nLink to item 3"

或者直接在块中输出:

[1, 2, 3].each{ |n| puts "Link to item #{n}" }

印刷:

Link to item 1
Link to item 2
Link to item 3

在您的情况下,这将是以下两个选项。我更喜欢后者。

<p>Keywords: <%=raw split_tags.map{|tag| link_to(tag)}.join %></p>

<p> Keywords:
  <% split_tags.each do |tag| %>
    <%= link_to(tag) %>
  <% end %>
</p>
于 2012-08-16T22:10:40.490 回答
0

你可能是说

<% split_tags = post.tags.split(',') %> # returns ["food", "computers", "health"] %>
<p>Keywords:
  <% split_tags.each do |tag| %>
  <%= link_to(tag, front_search_tag_path(:tag => tag)) %>
  <% end %>
</p>

或者

<% split_tags = post.tags.split(',') %> # returns ["food", "computers", "health"] %>
<p>Keywords:
  <%= split_tags.map{|tag| link_to(tag, front_search_tag_path(:tag => tag))}.join %>
</p>
于 2012-08-16T22:10:13.207 回答
0

不,返回值Array#each是数组本身(参见http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-each

您将希望使用Array#collect(或其别名,map),它将返回链接数组(请参阅http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-map)。然后,您可以使用连接将该数组转换为单个字符串。所以,你的代码看起来像

<% split_tags = post.tags.split(',') %>
<p>Keywords: <%= split_tags.collect {|tag| link_to(tag, front_search_tag_path(:tag => tag))}).join %></p>

.html_safe但是,这可能需要.join. 更好的是,执行以下操作:

<% split_tags = post.tags.split(',') %>
<p>Keywords: 
<% split_tags.each do |tag| %>
  <%= link_to(tag, front_search_tag_path(:tag => tag)) %>
<% end %>
</p>
于 2012-08-16T22:11:21.557 回答