Я новичок в Rails, и немного запутался о маршрутах:Как сделать маршрут к пользовательскому действию контроллера в Rails 3?
У меня есть контроллер устройств:
#devices_controllers.rb
class DevicesController < ApplicationController
def index
@devices = Device.all
end
def show
@device = Device.find(params[:id])
end
def new
@device = Device.new
end
def create
@device = Device.new(params[:device])
if @device.save
flash[:notice] = "Successfully created device."
redirect_to @device
else
render :action => 'new'
end
end
def edit
@device = Device.find(params[:id])
end
def update
@device = Device.find(params[:id])
if @device.update_attributes(params[:device])
flash[:notice] = "Successfully updated device."
redirect_to @device
else
render :action => 'edit'
end
end
def destroy
@device = Device.find(params[:id])
@device.destroy
flash[:notice] = "Successfully destroyed device."
redirect_to devices_url
end
def custom_action
"Success"
end
я хотел бы получить доступ к «custom_action» действие через URL, как это:
http://foo.bar/devices/custom_action
Я добавил эту строку в мой routes.rb файл:
match 'devices/custom_action' => 'devices#custom_action'
Однако, когда я пытаюсь URL в браузере, я получаю эту ошибку:
ActiveRecord::RecordNotFound in DevicesController#show
Couldn't find Device with ID=custom_action
Он, кажется, собирается #show действия вместо #custom_action. Если идентификатор пользователя не указан, и я перехожу к http://foo.bar/devices/custom_action
, я бы хотел, чтобы он пошел #custom_action.
Я читал Rails Routing from the Outside, но все еще, похоже, не может решить проблему.
Спасибо, John, у меня есть 'resources: devices' до моего пользовательского маршрута в файле' routes.rb'. Я просто переместил пользовательский маршрут, чтобы он был выше «ресурсов: устройств», и теперь он работает. Благодаря!! – Chanpory
Нет проблем. Рад, что смог помочь. знак равно – John