在下面的代码中,我正在努力使用,如果用户已接受邀请,他们就可以点击“不参加”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 %>
答案 0 :(得分:5)
<%= link_to_if invite.accepted ... %>
http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if
修改强>
link_to_if
使用link_to_unless
使用link_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>
答案 1 :(得分:1)
刚刚在这里回答:How to create a link_to_if with block only if condition is met?
如果您无论如何都想显示该块,但仅在满足特定条件时才添加链接,您可以完全捕获该块并在简单的条件中使用它:
<% 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 %>