在 Rails 中使用条件显示视图元素

Posted

技术标签:

【中文标题】在 Rails 中使用条件显示视图元素【英文标题】:Using conditionals to display elements of a view in Rails 【发布时间】:2011-11-28 22:52:51 【问题描述】:

我正在使用 Ruby on Rails,我想在视图中显示一个下拉列表,但前提是列表中的项目存在。有什么好方法可以检查模型的至少一个实例是否存在,然后根据此条件在视图中显示?

我正在考虑使用 if 语句,例如:

if firstmodel.secondmodels

。 . html的东西

但我认为空数组不会停止评估为 false。

【问题讨论】:

【参考方案1】:

你可以在你的视图中使用这样的东西:

<% if @items.any? %>
  <!-- drop down list here -->
<% else %>
  <div>No items :-(</div>
<% end %>

一般来说,你应该尽量不考虑逻辑,但我认为在这种简单的情况下,没有多少选择(?)

如果有太多像你的视图那样的if else,那么......你可以在你的控制器中检查这个并完全渲染另一个视图,比如:

# render no_content.html.erb if there are no items,
# default template file otherwise
render "no_content" unless @items.any?
# or:
render "no_content" if @items.empty?

【讨论】:

【参考方案2】:

使用上面的示例,您可以通过执行empty? 来查看数组是否为空。

if firstmodel.secondmodels.empty?

【讨论】:

【参考方案3】:

我相信你需要这样的东西:

<% if firstmodel.secondmodels.empty? %>
  <p>Stuff</p>
<% else %>
  <p>Other Stuff</p>
<% end %>

如果您使用的是 HAML:

- if firstmodel.secondmodels.empty?
  %p Stuff
- else %>
  %p Other Stuff

【讨论】:

以上是关于在 Rails 中使用条件显示视图元素的主要内容,如果未能解决你的问题,请参考以下文章

Rails html 视图,定位一个元素并使其仅对一个视图不可见。

Ruby/Rails-链接(完整元素)在视图*.erb中显示Edit Destroy Delete记录

Rails-覆盖在使用部分或特定控制器视图时的页面元素

如何在 Rails 视图中干燥条件 content_for?

如何在 Rails 中执行 AJAX-y 条件显示/隐藏表单字段?

在 Rails 视图中显示虚拟字段