【问题标题】:ActiveRecord::RecordNotFound (Couldn't find <...> with 'id'=):ActiveRecord::RecordNotFound(找不到带有 'id'= 的 <...>):
【发布时间】:2019-06-28 15:32:05
【问题描述】:

注意:我是 RoR 的新手;我的语法是haml

view 中,我在 if 语句中使用了一个参数,如下所示:

- if @progress_board.cover_image.present?

每次我的代码到达它时,我都会收到以下错误:

ActiveRecord::RecordNotFound (Couldn't find ProgressBoard with 'id'=):
app/controllers/progress_boards_controller.rb:340:in `get_panel_data'

首先,cover_image 在我的 ProgressBoard model 中声明。我确信这是有效的,因为我设法显示了这个 cover_image

在我的controller 中,@progress_board 在我的方法中声明:

  def get_panel_data
        @progress_board = ProgressBoard.find(params[:progress_board_id])
   ...
  end

这是我的route.rb 与问题相关的文件部分:

  resources :progress_boards do
    collection do
      get :get_progress_data
      get :get_panel_data
      get :render_tab
    end
    member do
      get :open_or_archive
      get :pbbackground
      get :remove_cover
      get :get_panel_data
    end
  end

我已经尝试用(params[:progress_board])(params[:id]) 替换(params[:progress_board_id]),但没有一个成功

我错过了什么?

【问题讨论】:

  • 应该是params[:id],错误是因为您发送的id与持久化的ProgessBoard不对应

标签: ruby-on-rails routes


【解决方案1】:

由于此行,您收到错误消息:

@progress_board = ProgressBoard.find(params[:progress_board_id])

params[:progress_board_id] 中的值与 ProgressBoard 表的 id 列中的值不对应。

您需要确保您传递的参数将存在于表的id 列中。

您可以使用@progress_board = ProgressBoard.find_by(id: params[:progress_board_id]),如果该值不在数据库表中,则不会导致异常。

【讨论】:

  • 这样做我得到以下错误:ActionView::Template::Error (undefined method cover_image' for nil:NilClass):`
  • 是的,因为您尝试在 nil 对象上调用 cover_image。确保您传递的参数确实存在于数据库中,并且不会为 nil
  • 我如何检查这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多