Подтвердить что ты не робот

Вызов метода с другого контроллера

Если у меня есть метод в другом контроллере, который я пишу, и я хочу вызвать этот метод, возможно ли это, или мне следует переместить этот метод в помощника?

4b9b3361

Ответ 1

Вы можете технически создать экземпляр другого контроллера и вызвать методы, но это утомительно, подвержено ошибкам и не рекомендуется.

Если эта функция является общей для обоих контроллеров, вероятно, вы должны иметь ее в ApplicationController или другом суперклассическом контроллере вашего создания.

class ApplicationController < ActionController::Base
  def common_to_all_controllers
    # some code
  end
end

class SuperController < ApplicationController
  def common_to_some_controllers
    # some other code
  end
end

class MyController < SuperController
  # has access to common_to_all_controllers and common_to_some_controllers
end

class MyOtherController < ApplicationController
  # has access to common_to_all_controllers only
end

Еще один способ сделать это как jimworm - использовать модуль для общей функциональности.

# lib/common_stuff.rb
module CommonStuff
  def common_thing
    # code
  end
end

# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
  include CommonStuff
  # has access to common_thing
end

Ответ 2

Попробуйте и постепенно перемещайте свои методы к вашим моделям, если они не применяются к модели, а затем помощнику и если ее еще нужно получить в другом месте, помещенном в ApplicationController

Ответ 3

Я не знаю подробностей вашей проблемы, но, возможно, пути могут быть решением в вашем случае (особенно если это действие RESTful).

http://guides.rubyonrails.org/routing.html#paths-and-urls

Ответ 4

Если вам необходимо выполнить некоторые операции с БД, вы можете написать общую функцию (метод класса) внутри этой модели. Функции, определенные внутри модели, доступны для всех контроллеров. Но это решение применяется ко всем случаям.