首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4-或者if语句

Rails 4-或者if语句
EN

Stack Overflow用户
提问于 2016-04-10 09:33:24
回答 2查看 332关注 0票数 0

我有一个组织模型,它有一个名为org_type的属性。在我的组织形式中,我要求用户指定他们的组织类型是大学、学院还是其他类型的组织。在我的显示页面中,如果组织类型是大学或学院,我想显示一些文本。

我不能让这两种方法或功能发挥作用。如果我只要求检查一种组织类型,如下面所示,它可以正常工作:

代码语言:javascript
复制
<% if @organisation.org_type == 'University' %>

如果我要求任何一种org类型,它都会显示所有内容,即使测试组织是“其他”:

代码语言:javascript
复制
<% if @organisation.org_type == 'University' or 'College' %>

上面的话不起作用。它显示了组织类型为“other”的文本。

有人能看到我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-10 10:23:46

这种观点中的逻辑可能会变得复杂和难以维护。它总是从这几个条件的一次检查开始,然后被复制到六个地方,然后条件改变为“大学、大学或自学”,你必须找到所有使用它的地方。

最好将其提取到模型中的一个方法中,然后有视图只需询问模型。

代码语言:javascript
复制
# Organisation model
def uni_or_college?
  %w(University College).include? org_type
end

# view
<% if @organisation.uni_or_college? %>
  ...
<% end %>

这也是一种可测试的方法--如果您有确保.uni_or_college?方法返回预期内容的测试,如果(当)需求在未来发生变化时,您将有一个安全网来帮助您的重构。

票数 1
EN

Stack Overflow用户

发布于 2016-04-10 09:39:53

rails实际上运行在if条件下,作为两个独立的条件。

代码语言:javascript
复制
<% if @organisation.org_type == 'University' or 'College' %>

@organisation.org_type == 'University'是真 'College'

均值,<% if (@organisation.org_type == 'University') || ('College') %>

要克服这种情况,您可以这样做:

代码语言:javascript
复制
<% if ['University', 'College'].include?(@organisation.org_type) %>

如果是‘大学’或‘学院’的话,它将返回真实的。否则false

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36528089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档