Rails:如何使用条件链接创建列表

时间:2018-03-23 21:14:40

标签: ruby-on-rails ruby ruby-on-rails-3

我正在开发一个RAILS应用程序,我在其中创建一个列出给定模型species.rb的所有可用资源的视图。

视图部分是:

<% i= @s
for species in @species %>
    <%= species.name %>, <%= species.author.surname %> <%= species.author.initial_name %>
<%  i -= 1
    end %>

某些资源species有相关文章,其他资源只有名称。我想遍历部分并仅添加链接到具有相关文章的条目。

类似于:如果存在species.article则添加链接,否则只需将species.name放入链接+循环通过所有条目。

我该怎么做?

更新:

感谢@jvillian和@ fool-dev我能够取得进步。在我的情况下,如果资源在其表的描述行中有描述,我想添加一个链接。

<% @species.each do |species| %>
    <div class="entry">
        <p><i><%= link_to_if(species.txtlandscape.present?, "#{species.name}, #{species.author.surname}, #{species.author.initial_name}. 2014", :controller => 'projects', :action => 'show', :id => species) %></i></p>
    </div>
<% end %>

现在添加了一个链接,我想知道它是否可以用于加载部分目标,例如in,其中ArticleRequest是我的JS函数:

<% @ species.each do | species | %>
    <div id="species-<%= species.id %>" class="species-entry">
        <a onClick="ArticleRequest('/species/show/<%= species.id %>', 'species-<%= species.id %>');">
            <p><%= species.name %></p>
        </a>
    </div>
<% end  %>

在找到使用link_to_if的方法之前,我会使用类似的内容:

<% for species in @species %>
    <% if species.txtlandscape.present? %>
        <a onClick="ArticleRequest('/species/show/<%= species.id %>', 'species-<%= species.id %>');">
            <p><%= species.name %>, <%= species.author.surname %> <%= species.author.initial_name %></p>
        </a>
    <% else %>
        <p><%= species.name %>, <%= species.author.surname %> <%= species.author.initial_name %></p>
    <% end %>
<% end %>

2 个答案:

答案 0 :(得分:3)

根据docs,您似乎可以做到:

<% @species.each do |specie| %>
  <%= link_to_if(specie.article, specie.name, specie_article_path(specie.article)) %>
<% end  %>

我创建了路径名称,你必须使它匹配你的实际路线。

顺便说一下,这个:

for species in @species 

超级非惯用。

答案 1 :(得分:2)

您可以这样做,请参阅下面的

<% for species in @species %>
    <% if species.article.present? %> #=> I thin it will be articles because table name is articles, anyway, you know better
        <%= link_to species.name, link_path(species.article) %>, #=> on the link_path it will be your proper link just replace this
    <% else %>
        <%= species.name %>, 
    <% end %>

    <%= species.author.surname %> <%= species.author.initial_name %>
<% end %>

您可以使用Rails each方法执行此操作,如下所示

<% @species.each do |species| %>
    <% if species.article.present? %> #=> I thin it will be articles because table name is articles, anyway, you know better
        <%= link_to species.name, link_path(species.article) %>, #=> on the link_path it will be your proper link just replace this
    <% else %>
        <%= species.name %>, 
    <% end %>

    <%= species.author.surname %> <%= species.author.initial_name %>
<% end %>

或者你可以使用link_to_if它也更容易理解

<% @species.each do |species| %>
    <%= link_to_if(species.article.present?, "#{species.name},", link_path(species.article)) %>

    <%= species.author.surname %> <%= species.author.initial_name %>
<% end %>

希望它会有所帮助。