我有一个组织模型,它有一个名为org_type
的属性。在我的组织形式中,我要求用户指定他们的组织类型是大学,学院还是其他类型的组织。在我的展示页面中,如果组织类型是大学或大学,我想显示一些文本。
我无法使这两种功能正常工作。如果我只是要求检查一个组织类型,例如下面的,它可以正常工作:
<% if @organisation.org_type == 'University' %>
如果我要求任何一种组织类型,即使测试组织是“其他”,它也会显示所有内容:
<% if @organisation.org_type == 'University' or 'College' %>
以上不起作用。它显示组织类型为“其他”的文本。
谁能看到我做错了什么?
答案 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?
方法返回预期的内容,如果(如果)将来需求发生变化,您可以使用安全网来帮助您重构。