【问题标题】:Rails: How can I show a block with or without a link based on a condition (link_to_if)Rails:如何根据条件显示带有或不带有链接的块(link_to_if)
【发布时间】:2023-04-08 04:20:01
【问题描述】:

我有一个复杂的标签块(<h3><p>、...),我想根据条件在其周围使用链接或不使用链接进行渲染。

我知道link_to_if 是这样工作的:

<% link_to_if condition, name, path %>

如果条件为false,则只会呈现名称。

我知道link_to&amp;block

<% link_to path do %>
  [complex content]
<% end %>

我想要两者的结合。接受&amp;blocklink_to_if 语句,如果条件为false,则块将在没有链接的情况下呈现。不幸的是,带有&amp;blocklink_to_if 语句不像link_to 语句那样工作:(

有人对我有什么建议吗?任何帮助都非常感谢

【问题讨论】:

    标签: ruby-on-rails link-to


    【解决方案1】:

    我为此编写了自己的助手:

       def link_to_if_with_block condition, options, html_options={}, &block
         if condition
           link_to options, html_options, &block
         else
           capture &block
         end
       end
    

    你可以这样使用它:

    <%= link_to_if_with_block true, new_model_path { "test" } %>
    <%= link_to_if_with_block true, new_model_path do %>
      Something more complicated
    <% end %>
    

    【讨论】:

    • 我只是不知道如何将所有不同的参数传递给link_to,但我想当你需要更复杂的东西时你会想出来的;)
    • 嗯。您的辅助方法有些奇怪。如果我将 Helper 与 &lt;%= %&gt; 一起使用,如果条件为真,则该块将被呈现一次(周围有一个链接),但如果条件为假,则将呈现两次(没有链接):(
    • capture(&amp;block) 而不是 block.call 完成这项工作:)
    【解决方案2】:

    我只是重写了内置方法,因为它们提供的块使用对我们的使用没有多大意义。只需将其添加到帮助程序中,这将使 link_to_if 像 link_to 一样工作。

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

    【讨论】:

      猜你喜欢
      • 2018-01-24
      • 2020-04-26
      • 1970-01-01
      • 2021-02-03
      • 2017-01-20
      • 2014-05-09
      • 2021-05-06
      • 1970-01-01
      • 2018-01-16
      相关资源
      最近更新 更多