没有Id:Rails 4自定义控制器动作,找不到

我正在尝试为某些数据创建一个JSON提要,以便将其部署到我所拥有的图形中。 我一直遇到“找不到没有Id的大坝”,而且没有任何关于SO的答案似乎都有解决方法。 我的参数似乎正在通过罚款,我有点困惑。

的routes.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似乎刚刚告诉我,正确的参数正在通过。

谢谢

编辑

这是我搜索w / o 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])