如果满足条件,Rails 中的条件 link_to 块

Conditional link_to block in Rails if condition is met

我想将条件 link_to 包裹在一些代码中,如果满足以下条件,这些代码只会呈现 link:IF current_user.type == 'Agent'。不管怎样,条件中的内容仍然需要渲染。

我当前的区块是这样的:

<% @jobs_published.in_groups_of(3, false) do |job| %>
    <div class="row">
        <%= link_to "/job/#{job.id}" do %>
            <div class="panel">
                <h4>Job</h4>
                <p><%= job.suburb %></p>
                <p><%= job.street_name %></p>
                <p><%= job.post_cide %></p>
            </div>
        <% end %>
    </div>
<% end %>

你应该使用 link_to_if.

这是文档 link。 http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if

你可以试试下面的

<% @jobs_published.in_groups_of(3, false) do |job| %>
    <div class="row">
        <%= link_to_if(current_user.type == 'Agent', "/job/#{job.id}") do %>
            <div class="panel">
                <h4>Job</h4>
                <p><%= job.suburb %></p>
                <p><%= job.street_name %></p>
                <p><%= job.post_cide %></p>
            </div>
        <% end %>
    </div>
<% end %>

有很多条件link_to元素

link_to_if , link_to_unless, link_to_unless_current

我通过执行以下操作解决了这个问题:

查看:

<% @jobs_published.in_groups_of(3, false) do |job| %>
    <div class="row">
        <%= link_to_if current_user && current_user.type == 'Agent', { controller: "agents", action: "job", :id => job.id } do %>
            <div class="panel">
                <h4>Job</h4>
                <p><%= job.suburb %></p>
                <p><%= job.street_name %></p>
                <p><%= job.post_cide %></p>
            </div>
        <% end %>
    </div>
<% end %>

应用程序助手:

def link_to_if(*args,&block)
    args.insert 1, capture(&block) if block_given?

    super *args
end

参考: