Rails 4 - 无论是声明还是声明

时间:2016-04-10 09:33:25

标签: ruby-on-rails ruby if-statement

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

我无法使这两种功能正常工作。如果我只是要求检查一个组织类型,例如下面的,它可以正常工作:

<% if @organisation.org_type == 'University' %>

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

<% if @organisation.org_type == 'University' or 'College' %>

以上不起作用。它显示组织类型为“其他”的文本。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果条件是两个独立的条件,

rails实际上会在下面运行。

<% if @organisation.org_type == 'University' or 'College' %>

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

表示<% if (@organisation.org_type == 'University') || ('College') %>

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

<% if ['University', 'College'].include?(@organisation.org_type) %>

如果@organisation.org_type是&#39;大学&#39;它会返回 true 或者&#39;大学&#39;。否则 false

答案 1 :(得分:1)

视图中的逻辑可能会变得复杂且难以维护。它始终只是检查这几个条件,然后被复制到六个地方,然后条件变为&#34;大学,大学或自学&#34;而且你必须找到你使用它的所有地方。

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

# Organisation model
def uni_or_college?
  %w(University College).include? org_type
end

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

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