Ruby on Rails: ссылка на одноэлементное действие класса в маршрутах - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь работать над классом, используя Ruby on Rails, чтобы создать простой контроллер. В этом смысле у меня есть синглтон, и мне нужно указать маршруты к нему. Как это возможно?

Полученное сообщение:

Не удалось найти действие 'foo' для Test :: TestController

Файл контроллера в папке Test:

class Test::TestController < ApplicationController
    class << self
            def index
                    render json: {test:"Hello World!"}
            end
            def foo
                    render json: {response:"It works!"}
            end
    end
end

Файл маршрутов:

Rails.application.routes.draw do
    namespace 'test' do
            resources :test
    end
    get '/:id', to: 'test/test#foo'
end

1 Ответ

4 голосов
/ 31 октября 2019

Это невозможно. И это даже далеко не хорошая идея.

Контроллеры Rails принимают свои входные данные в форме запроса и env, которые включают в себя такие вещи, как настройки сервера и все, что промежуточное программное обеспечение упаковало в качестве аргументов инициализатора. Они не являются глобальными, как, например, в PHP.

Действия самого контроллера фактически не принимают никаких аргументов. Поэтому даже если бы вы могли объявить свои действия как методы класса, у вас не было бы абсолютно никакого контекста. И на самом деле это чертовски неважно, поскольку вам придется заменить весь уровень маршрутизатора, чтобы он даже вызывался.

В Ruby даже нет реальных классов-синглтонов. Если вам нужен объект, который не может быть создан, используйте модуль (и нет, вы не можете сделать модуль контроллером в рельсах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...