这更像是一个风格问题。
在编写查询时,我总是发现自己正在检查查询的结果是否为空白,而且似乎 - 我不知道,在某种程度上过于冗长或错误。
EX。
def some_action
@product = Product.where(:name => params[:name]).first
end
如果没有名称= params [:name]的产品,我会得到一个零值的东西。
我接着写了这样的东西
def some_action
product = Product.where(:name -> params[:name])
@product = product if !product.blank?
end
是否有更简洁的方法来处理零值和空白值?当事情依赖于其他关系时,这会变得更加令人头痛
EX。
def some_action
@order = Order.where(:id => params[:id]).first
# if order doesn't exist, I get a nil value, and I'll get an error in my app
if !@order.nil?
@products_on_sale = @order.products.where(:on_sale => true).all
end
end
基本上,是否有一些我没有的东西;但是还是学会了处理nil,空白并且可能更有效地查看破坏实例变量?
由于
答案 0 :(得分:3)
如果它只是风格相关,我会看看Rails的Object#try方法,或者考虑类似andand的内容。
使用您的示例,尝试:
def some_action
@order = Order.where(:id => params[:id]).first
@products_on_sale = @order.try(:where, {:onsale => true}).try(:all)
end
或使用andand:
def some_action
@order = Order.where(:id => params[:id]).first
@products_on_sale = @order.andand.where(:onsale => true).andand.all
end
答案 1 :(得分:2)
即使你在控制器中找到“零破坏事物”,你仍然会在你的视图中遇到这个问题。在您的控制器中添加一个if
语句并将视图重定向到“未找到”页面,而不是在您的视图中使用多个if
更容易。
或者你可以添加这个
protected
def rescue_not_found
render :template => 'application/not_found', :status => :not_found
end
到application_controller
。点击此处:https://ariejan.net/2011/10/14/rails-3-customized-exception-handling