修复未定义方法的最佳方法
Best way to fix undefined method
我正在构建一个 rails 应用程序,其中有一个博物馆页面,该页面具有一个功能,可以显示展品最多的博物馆。问题是,当没有任何展览添加到数据库时,它会提供一个未定义的方法 'museum_name'。所以我遇到的问题是,我不确定进行检查的最佳方法是什么,如果展品为零,我仍然可以访问该页面?
博物馆管理员:
def index
@museums = Museum.all
most_exhibits = Exhibit.most_exhibits
most_exhibits.each do |museum|
@top_museum = MuseumsHelper.get_museum_name(museum.museum_id)[0]
end
正在使用的助手 class 方法:
def self.get_museum_name(museum_id)
Museum.where(id: museum_id)
end
显示在浏览量中:
<%= @top_museum.museum_name %>
最好的方法取决于您想要的方式。我认为您的理想解决方案是检查 if/else
然后相应地显示内容:
<% if @top_museum.present? %>
<%= @top_museum.museum_name %>
<% else %>
<span>Nothing to display</span>
<% end %>
或使用 try
<%= @top_museum.try(:museum_name) %>
或者如果您有 ruby 2.3.0 或更新版本,您可以使用安全导航运算符 <%= @top_museum&.museum_name %>
(Read more)。
您可以在您的助手中使用 try,这样它会尝试查询,如果失败则 returns nil
def self.get_museum_name(museum_id)
Museum.try(where(id: museum_id))
end
我正在构建一个 rails 应用程序,其中有一个博物馆页面,该页面具有一个功能,可以显示展品最多的博物馆。问题是,当没有任何展览添加到数据库时,它会提供一个未定义的方法 'museum_name'。所以我遇到的问题是,我不确定进行检查的最佳方法是什么,如果展品为零,我仍然可以访问该页面?
博物馆管理员:
def index
@museums = Museum.all
most_exhibits = Exhibit.most_exhibits
most_exhibits.each do |museum|
@top_museum = MuseumsHelper.get_museum_name(museum.museum_id)[0]
end
正在使用的助手 class 方法:
def self.get_museum_name(museum_id)
Museum.where(id: museum_id)
end
显示在浏览量中:
<%= @top_museum.museum_name %>
最好的方法取决于您想要的方式。我认为您的理想解决方案是检查 if/else
然后相应地显示内容:
<% if @top_museum.present? %>
<%= @top_museum.museum_name %>
<% else %>
<span>Nothing to display</span>
<% end %>
或使用 try
<%= @top_museum.try(:museum_name) %>
或者如果您有 ruby 2.3.0 或更新版本,您可以使用安全导航运算符 <%= @top_museum&.museum_name %>
(Read more)。
您可以在您的助手中使用 try,这样它会尝试查询,如果失败则 returns nil
def self.get_museum_name(museum_id)
Museum.try(where(id: museum_id))
end