ruby-on-rails - 修复未定义方法的最佳方法

标签 ruby-on-rails ruby undefined nomethoderror

我正在构建一个 Rails 应用程序,其中有一个博物馆页面,该页面的一个功能是显示展品最多的博物馆。问题是,当没有展品添加到数据库时,它会给出未定义的方法“museum_name”。所以我遇到的问题是,我不确定进行检查的最佳方法是什么,以便在展品为零的情况下仍允许我访问该页面?

博物馆 Controller :

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

正在使用的帮助器类方法:

  def self.get_museum_name(museum_id)
    Museum.where(id: museum_id)
  end

在 View 中显示:

<%= @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)。

关于ruby-on-rails - 修复未定义方法的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780064/

相关文章:

ruby-on-rails - 如何在插件的 before_save 回调中包含实例方法?

php - fatal error : Call to undefined function get_header()

javascript迭代对象 - 第一个元素未定义

ruby-on-rails - 是否可以使用 Ruby 1.9x 运行 Ruby on Rails?

ruby-on-rails - iBeacon apps 'communicate' 怎么用在线平台?

ruby-on-rails - 我究竟如何在 rails 3 中安装 restful 身份验证插件?

ruby-on-rails - Rails : array. 在分隔符中加入 html 被转义

mysql - 带有 CASE 和 WHEN 的 Ruby update_all

java - 当我正确查看未定义的方法(构造函数)时,出现有关未定义方法(构造函数)的错误? ( java )

ruby-on-rails - 如何将 t.date 默认为迭代日期?