ruby-on-rails - 找不到没有 ID : Rails 4 custom controller action 的 [MODEL]

标签 ruby-on-rails ajax ruby-on-rails-4 rails-routing friendly-id

我正在尝试为某些数据创建一个 JSON 提要,以将其拉入我的部分图表中。我一直遇到“没有 ID 就找不到 Dam”的问题,而且 SO 上的答案似乎都没有解决办法。我的参数似乎传递得很好,我有点困惑。

路线.rb

require "resque/server"
Rails.application.routes.draw do
  mount Resque::Server, :at => "/resque"

  root 'home#index'
  get 'about', to: 'home#about'

  resources :dams, only: [:index, :show] do
      get 'count_data', to: 'dams#count_data'
    resources :fish_counts, only: [:index, :show]
  end

  resources :fish
end

dams_controller.rb 中的自定义操作:

    def count_data
      @dam = Dam.includes(:fish_counts, :fish).friendly.find(params[:id])
      @fish_counts = FishCount.for_year(Date.today.year).where("dam_id =?",  @dam.id).limit(200).order(count_date: :desc)
      respond_to do |format|
        format.json {
          render json: {:fish_counts => @fish_counts}
        }
      end
  end

我尝试使用 id 而不是 Friendly.find,并得到相同的结果。如果删除 @dam 行并手动将 @dam.id 添加到 @fish_counts 实例,我就会成功。

为什么实例变量没有获取传递给它的参数?在这种情况下,我该如何调试? raise params.inspect 似乎刚刚向我展示了正确的参数正在传递。

谢谢

编辑

这是我在不进行Friendly.find搜索时的控制台输出:

Started GET "/dams/3/count_data.json" for ::1 at 2015-08-15 18:11:04 -0700
Processing by DamsController#count_data as JSON
Parameters: {"dam_id"=>"3"}
Completed 404 Not Found in 2ms (ActiveRecord: 0.0ms)

ActiveRecord::RecordNotFound (Couldn't find Dam without an ID):
app/controllers/dams_controller.rb:15:in `count_data'

最佳答案

您在堆栈跟踪中看到,params 中没有 :id,而是 :dam_id,因此您应该像这样使用它:

@dam = Dam.includes(:fish_counts, :fish).find(params[:dam_id])

关于ruby-on-rails - 找不到没有 ID : Rails 4 custom controller action 的 [MODEL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030893/

相关文章:

mysql - 在 Mac 上安装 MySQL2 gem 失败

javascript - Wordpress AJAX 不起作用 - 响应 0

jquery - 使用 AJAX 显示 Laravel 验证错误

javascript - jquery 的 CORS 错误

ruby-on-rails - 夹具关联在邮件测试中失败

html - 如何使用 ERB 将类添加到选择下拉循环

ruby-on-rails - 我的 rails ./bin 目录中有什么?

javascript - 向 jquery ui 可排序列表中的每个项目添加删除按钮

ruby-on-rails - 模拟 Curl::Easy.perform? (在路边)

ruby-on-rails - 无法更改 active_admin 列宽