首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复未定义方法的最佳方法

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

Stack Overflow用户
提问于 2019-09-04 08:22:35
回答 2查看 195关注 0票数 2

我正在构建一个rails应用程序,其中我有一个博物馆页面,其中有一个功能,它显示了最多的展品博物馆。问题是,当没有展品添加到数据库中时,它会给出一个未定义的方法‘method _name’。所以我的问题是,我不确定什么是最好的方法来进行检查,如果没有展品,仍然允许我访问页面?

博物馆管理员:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
  def self.get_museum_name(museum_id)
    Museum.where(id: museum_id)
  end

在视图中显示:

代码语言:javascript
复制
<%= @top_museum.museum_name %>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-04 09:45:40

做这件事的最佳方式取决于你想要它是什么样子。我认为理想的解决方案是检查if/else,然后相应地显示内容:

代码语言:javascript
复制
<% if @top_museum.present? %>
  <%= @top_museum.museum_name %>
<% else %>
  <span>Nothing to display</span>
<% end %>

或者使用try <%= @top_museum.try(:museum_name) %>,或者如果你有Ruby2.3.0或更新版本,你可以使用安全导航操作符<%= @top_museum&.museum_name %> (Read more)。

票数 1
EN

Stack Overflow用户

发布于 2019-09-04 10:11:00

您可以在helper中使用try,这样它就会尝试查询,如果失败,则返回nil

代码语言:javascript
复制
def self.get_museum_name(museum_id)
   Museum.try(where(id: museum_id))
end

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57780064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档