Вызов метода из другого контроллера - PullRequest
30 голосов
/ 22 ноября 2011

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

Ответы [ 4 ]

49 голосов
/ 22 ноября 2011

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

Если эта функция является общей для обоих контроллеров, вероятно, она должна быть в 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
3 голосов
/ 22 ноября 2011

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

0 голосов
/ 13 июня 2016

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

0 голосов
/ 22 ноября 2011

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

http://guides.rubyonrails.org/routing.html#path-and-url-helpers

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