2015-03-23 3 views
-1

Метод set_instrument работает для методов, показывая, редактирует, обновляет и уничтожает, но не работает для диаграммы методов. Не знаю, как это исправить. Вот мой контроллер:Невозможно получить параметр [: id] в методе управления

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 

Я получаю сообщение об ошибке: Не удалось найти инструмент без ID в операторе @instrument = Instrument.find(params[:id]) в методе set_instrument.

+0

Покажите свой 'routes.rb' файл. 'chart' должен быть участником маршрута ресурсов' instrument', может быть, вы ошибочно сделали его маршрутом сбора? –

+0

Вы не отправляете никаких аргументов в метод. Как вы называете свой метод «chart»? – hattenn

+0

@hattenn ты шутишь, не так ли? Это действие контроллера, оно не может принимать никаких аргументов. –

ответ

1

В маршрутах, у вас есть что-то вроде этого:

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

Если вы хотите иметь id параметров в этом маршруте, вы должны изменить его член:

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

ли не забудьте, что вы должны передать идентификатор в chart ссылок, например:

link_to 'chart', [:chart, instrument] 

Для получения дополнительной информации о маршрутизации в Rails, вы можете проверить Guides:

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

+1

Это сработало, спасибо за помощь и за ссылку, я обязательно буду это изучать. Единственное изменение, которое я должен был сделать, чтобы все работало правильно, было: link_to 'chart', [: chart, @instrument]. Мне пришлось использовать локальную переменную для инструмента, которая установлена ​​методом set_instrument. Кроме того, я реализовал версию, используя: member. –

Смежные вопросы