我想有条件地将类“hidden”添加到Rails链接标记中,具体取决于“accepted == true”。
如果我没有使用导轨link_to
我可以<a href="#" class="foo bar <%= "hidden" if accepted == true %>" >
。如何在link_to
内完成此操作?
<%= link_to "Accept Friend Request",
"#",
class: "btn btn-success btn-sm btn-block requestSent ???hidden???",
disabled: true %>
答案 0 :(得分:23)
如果对#{}使用插值,则在它之间放置的任何内容都将作为普通的旧Ruby代码运行。 在此示例中,您可以在字符串中添加条件类,如下所示:
<%= link_to "Accept Friend Request",
"#",
class: "btn btn-success btn-sm btn-block requestSent #{'hidden' if accepted}",
disabled: true %>
请注意,您应该在类名“hidden”周围使用单引号。
另请注意,当变量表示布尔值(true或false)时,您无需明确说出if accepted == true
。您可以简单地说if accepted
。
答案 1 :(得分:15)
您可以在link_to
:
<% css_class = accepted ? "hidden" : "" %>
<%= link_to "Accept Friend Request",
"#",
class: "btn btn-success btn-sm btn-block requestSent #{css_class}",
disabled: true %>
答案 2 :(得分:4)
您也可以使用助手来建立链接:
def accept_friend_request_link
classes = [:btn, :and_friends]
if accepted
classes << :hidden
end
link_to 'Accept Friend Request', '#', class: classes, disabled: true
end
答案 3 :(得分:0)
我发布了this question的类似答案。
标准方法需要将逻辑放入视图中并使用字符串插值或将事物移动到单独的帮助器中。
这是一种更新的方法,可以避免任何这种情况:
<%= link_to "Accept Friend Request",
"#",
class: class_string("btn btn-success btn-sm ban-block requestSent" => true, hidden: accepted),
disabled: true %>
class_string
方法 class_string
助手采用包含 CSS类名字符串和布尔值的键/值对的哈希值。该方法的结果是一串类,其中布尔值计算为true。
class_names("foo bar" => true, baz: false, buzz: some_truthy_variable)
# => "foo bar baz"
这项技术的灵感来自于Facebook classNames
前端框架中名为classSet
(以前称为React
)的附加组件。
截至目前,Rails中不存在class_names
函数,但this article向您展示了如何在项目中添加或实现它。
答案 4 :(得分:0)
我已覆盖link_to以期待def link_to(options = {}, html_options = {})
if html_options.is_a?(Hash) && html_options.key?(:class_if)
html_options[:class] <<
(" #{html_options[:class_if][1].strip}") if html_options[:class_if][0]
html_options.delete :class_if
end
super(options, html_options)
end
参数,请查看:
<%= link_to(my_path, class: "class1", class_if: [true_or_false?, 'class2']) %>
用法:
c(rep(1, 4), rep(2,3), rep(3, 2), 4)
我只是覆盖了一个方法,但一个好的重构就是覆盖所有描述的签名:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to