【问题标题】:Conditional link_to block in Rails if condition is met如果满足条件,Rails 中的条件 link_to 块
【发布时间】:2015-01-19 07:15:21
【问题描述】:

我想在一些代码周围包装一个条件 link_to,仅在满足以下条件时才呈现链接: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 %>

【问题讨论】:

    标签: ruby-on-rails link-to


    【解决方案1】:

    我通过以下方式解决了这个问题:

    查看:

    <% @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
    

    参考:https://stackoverflow.com/a/25916594/2811283

    【讨论】:

      【解决方案2】:

      你可以试试下面这个

      <% @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_iflink_to_unlesslink_to_unless_current

      【讨论】:

      • 感谢@rajarshi-das 的回答。我已经尝试了上述解决方案,但是它没有在块内输出任何内容。上面的解决方案呈现如下:&lt;a href="/"&gt;/job/33&lt;/a&gt; 所以我尝试了:&lt;%= link_to_if current_user.type == 'Agent', "", "/job/#{job.id}" do %&gt; 并且 href 现在是正确的,但是块内的任何内容都没有显示!
      • 你必须像这样使用&lt;%= link_to_if current_user.type == 'Agent', "/job/#{job.id}", "/job/#{job.id}" do %&gt;
      • 谢谢,但它仍然没有在我的块内渲染任何东西,例如&lt;div class="panel"&gt; &lt;h4&gt;Job&lt;/h4&gt; &lt;p&gt;&lt;%= job.suburb %&gt;&lt;/p&gt; &lt;p&gt;&lt;%= job.street_name %&gt;&lt;/p&gt; &lt;p&gt;&lt;%= job.post_cide %&gt;&lt;/p&gt; &lt;/div&gt;
      • 我也不需要它渲染任何字符串,它只需要一个 href
      • 您当前的用户类型是否为“代理”查看/调试它所提供的内容&lt;%= current_user.type %&gt;
      【解决方案3】:

      你应该使用link_to_if

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

      【讨论】:

      • 谢谢伙计。看看我上面的 cmets 没有按预期工作。
      • @ThomasTaylor,所以你想在里面渲染内容,但不是作为链接,而是应该是简单的 span 和内容。
      • 谢谢,但是 link_to_if 是的,我想渲染我的块中的所有内容,我只想将它们全部包装在条件 href 中。
      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多