6

在下面的代码中,我试图做到这一点,如果用户接受了邀请,他们将能够点击“不参加”的 div 来拒绝邀请。

这一点逻辑工作正常,但我试图得到它,所以无论用户是否接受了邀请,“不参加”的 div 都会出现。

现在,只有当用户接受了邀请时,div 才会出现。

有没有办法使 link_to 语句有条件,但无论如何都保留 div?(也就是说,让 div 始终存在,但如果用户接受了邀请,它只是一个链接?)

<% if invite.accepted %>
    <%= link_to(:controller => "invites", :action => "not_attending") do %>                             
        <div class="not_attending_div">
             not attending
        </div>
    <% end %>
<% end %>
4

2 回答 2

8
<%= link_to_if invite.accepted ... %>

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if

编辑:

link_to_ifuses link_to_unlesswhich useslink_to的代码,它应该与相同的选项工作相同

  def link_to_unless(condition, name, options = {}, html_options = {}, &block)
    if condition
      if block_given?
        block.arity <= 1 ? capture(name, &block) : capture(name, options, html_options, &block)
      else
        name
      end
    else
      link_to(name, options, html_options)
    end
  end

例子

<%=
   link_to_if(@current_user.nil?, "Login", { :controller => "sessions", :action => "new" }) do
     link_to(@current_user.login, { :controller => "accounts", :action => "show", :id => @current_user })
   end
%>

在这里查看http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_unless

编辑:

这是否达到了你所需要的。对不起,没有更好地阅读这个问题。

<div class="not_attending_div">
   <%= link_to_if invite.accepted, "not attending", (:controller => "invites", :action => "not_attending") %>
</div>
于 2012-06-27T19:26:01.300 回答
1

刚刚在这里回答:如何仅在满足条件时才使用块创建 link_to_if?

如果您仍然想显示该块,但仅在满足特定条件时才添加链接,您可以完全捕获该块并在简单的条件下使用它:

<% block_content = capture do %>
  <div class="not_attending_div">
    not attending
  </div>
<% end %>

<% if invite.accepted %>
  <%= link_to block_content, controller: :invites, action: :not_attending %>
<% else %>
  <%= block_content %>
<% end %>
于 2021-03-11T11:19:19.107 回答