我已经使用Rails一段时间了,发现自己经常在视图代码中检查某些属性或对象是否为空值,然后再显示它们。我开始怀疑这样做是否总是最好的选择。
到目前为止,我的理由是,由于我的应用程序依赖于用户输入,意外情况可能会发生。如果从编程方面学到的一件事情是,用户输入的东西程序员没有考虑到是运行时错误的最大源头之一。通过检查空值,我希望能够避免这种情况,并使我的视图优雅地处理问题。
但实际上,在我的模型或控制器代码中通常出现类似的nil或无效值检查,原因各不相同。我不会严格称之为代码重复,但它似乎并不符合DRY原则。如果我已经在控制器中检查过空对象,那么在视图中假设该对象确实不为空,这样做是否可以?对于可以为空的属性,每次都检查是有意义的,但对于对象本身,我不确定什么才是最佳实践。
以下是一个简化但典型的示例:
控制器代码
def show
@item = Item.find_by_id(params[:id])
@folders = Folder.find(:all, :order => 'display_order')
if @item == nil or @item.folder == nil
redirect_to(root_url) and return
end
end
查看代码
<% if @item != nil %>
display the item's attributes here
<% if @item.folder != nil %>
<%= link_to @item.folder.name, folder_path(@item.folder) %>
<% end %>
<% else %>
Oops! Looks like something went horribly wrong!
<% end %>
这是一个好主意还是只是愚蠢的想法?