无法在控制方法中获得param [:id]

时间:2015-03-23 13:07:42

标签: ruby-on-rails

方法set_instrument适用于方法show,edit,update和destroy,但不适用于方法图表。 不知道如何解决这个问题。这是我的控制器:

class InstrumentsController < ApplicationController
      before_action :set_instrument, only: [:show, :edit, :update, :destroy, :chart]
      def chart
        @measurements = @instrument.measurements.order("scheduled_on asc")
      end
      def show
        @measurements = @instrument.measurements.order("scheduled_on asc")
      end
      def edit
      end
      private
        def set_instrument
          @instrument = Instrument.find(params[:id])
        end
        def instrument_params
          params.require(:instrument).permit(:inst_id, :chainage, :northing, :easting,
           :latitude, :longitude, :above_tbm, :group_id, :section, :number_of_sensors,
           :review_level, :alert_level)
        end
    end

我收到错误:在方法@instrument = Instrument.find(params[:id])的语句set_instrument中找不到没有ID的工具。

1 个答案:

答案 0 :(得分:1)

在你的路线中,你有类似的东西:

resources :instruments do
  get 'chart', on: :collection
end

如果您希望在此路线中拥有id参数,则必须将其更改为成员:

resources :instruments do
  get 'chart', on: :member
end

请勿忘记您必须将ID传递给chart链接,如下所示:

link_to 'chart', [:chart, instrument]

有关Rails中路由的更多信息,您可以查看指南:

http://guides.rubyonrails.org/routing.html