修复未定义方法的最佳方法

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

参考:https://apidock.com/rails/v3.2.1/Object/try