我ruby on rails,在视图中,我想检查是否有一些变量不为null。 我想首先我必须检查是否有一个对象,然后检查是否r1!= nil。 有没有更好的办法? 谢谢
<% neki=Anketare.where("semestar_id=? AND JMBAG=? AND sifPred=? and vrstaNastave=?",session[:semestar_id],predmett.JMBAG,params[:format],Vrstanastave.find(1).vrstaNastave) %>
<% if neki.exists? %>
<% if neki.first.r1!=nil %>
A+
<% else %>
A-
<% end %>
<% else %>
A-
<% end %>
答案 0 :(得分:2)
使用ternary operator,我建议使用
模型或控制器! -
@neki=Anketare.where("semestar_id=? AND JMBAG=? AND sifPred=? and vrstaNastave=?",
session[:semestar_id],predmett.JMBAG,params[:format],
Vrstanastave.find(1).vrstaNastave)
查看:
<%= @neki.exists? ? (@neki.first.r1!=nil ? "A+" : "A-") : "A-" %>
可能有用。
您需要@
在控制器和视图之间共享变量。
答案 1 :(得分:2)
您可以使用foo.nil?
来测试某些内容是否为零。所以你可以打电话给neki.first.r1.nil?测试它是否为零。您也可以将项目本身用作布尔测试:
if neki.first.r1; do_something; else; do_something_else; end
使用rails,您还可以使用foo.blank?
检查某些内容是否为nil且不是空字符串或空数组。 Rails还会让foo.present?
检查某些内容是否blank?
(与!foo.blank?
相同)
因此,在您的情况下,您只需将整个if语句集更改为:
<%= (neki.present? and neki.first.r1) ? "A+" : "A-" %>
答案 2 :(得分:1)
唉。使用andand gem:
<%= @neki.andand.first.r1 ? "A+" : "A-" %>
答案 3 :(得分:1)
我不会在视图中包含任何逻辑。相反,您可以编写一个模型,在neki
和neki.first.r1
上执行逻辑并计算成绩,然后从您的视图中调用它。
示例:
# Model
class Neki
def initialize(neki)
@neki = neki
end
def grade
(neki.present? and neki.first.r1) ? "A+" : "A-"
end
end
# Controller
@neki = Neki.new(Anketare.where(...))
# View
<%= @neki.grade %>
希望这有帮助!