如何仅在满足特定条件时显示Rails的link_to按钮?
解决link_to_if渲染带图标按钮的问题
嘿,我懂你的困扰——用link_to的时候能完美渲染带Font Awesome图标的按钮,换成link_to_if之后却只剩图标,链接样式没跟上,对吧?这其实是link_to_if的块逻辑和你预期的有偏差,咱们来一步步解决:
问题根源
你写的link_to_if 0, movies_path do <i class="fa fa-caret-left"></i>里,0在Ruby中会被判定为false,这时候link_to_if不会把块里的内容包裹成<a>链接,只会直接输出那个<i>标签,自然就没有你之前设置的按钮样式了(毕竟样式是绑定在<a>元素上的)。
最稳妥的解决方案:用条件判断包裹原link_to代码
其实最简单不容易出错的方式,就是把你原来正常工作的link_to代码,用普通的if条件包裹起来,这样既完全保留你原来的按钮样式,又能精准控制显示时机:
<% if your_condition_here %> <%= link_to movies_path do %> <i class="fa fa-caret-left"></i> <% end %> <% end %>
把your_condition_here换成你需要的特定参数判断,比如params[:page].to_i > 1或者@show_back_button之类的,只有当条件满足时,整个带图标的按钮链接才会渲染出来。
如果你一定要用link_to_if
如果你坚持想用link_to_if,需要注意两个关键点:
- 确保你的条件是正确的(把
0换成实际为true的判断逻辑); - 给
link_to_if的第二个参数传空字符串,因为当使用块时,这个参数会被块内容替代,但不传的话可能导致渲染异常:
<%= link_to_if your_condition_here, '', movies_path do %> <i class="fa fa-caret-left"></i> <% end %>
这样当条件为真时,会生成正确的<a>链接包裹图标;条件为假时,会返回空内容,不会显示任何东西。
为什么不推荐直接用link_to_if的默认块逻辑?
默认情况下,当link_to_if的条件为假时,它会直接渲染块里的内容(也就是那个<i>标签),这显然不是你想要的——你希望不满足条件时完全不显示按钮,而不是显示一个没有链接的图标。所以用普通的if判断反而更直观,也更容易维护。
内容的提问来源于stack exchange,提问作者Matthew Bins
相关产品推荐
相关产品推荐

