Веб Зображення Новини Групи Блоги Перекладач Gmail Ще »
Групи, які ви переглядали нещодавно | Довідка | Увійти
Головна сторінка Груп Google
Каким образом можно перебрать все контроллеры и экшены приложения?
Занадто багато тем, що мають бути показані першими. Для того, щоб показати тему першою, зніміть цю опцію з іншої теми.
Під час обробки вашого запиту сталася помилка. Будь ласка, повторіть вашу спробу пізніше.
флаг
  10 повідомлення - Згорнути всі  -  Перекласти все вказаною мовою: Перекладено (переглянути всі оригінали)
Група, до якої ви додаєте допис, - група Usenet. Відтак, будь-хто в Інтернеті бачитиме вашу електронну адресу.
Вашу відповідь не було надіслано.
Ваш допис надіслано
 
Від:
Кому:
Копія:
Продолжить:
Додати копію: | Додати продовження: | Редагувати тему
Тема:
Підтвердження:
З метою підтвердження введіть символи, наведені на зображенні нижче, або числа, які чуєте, натиснувши значок доступу. Прослухайте і введіть цифри, що чуєте
 
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 4 Лис, 23:31
Від: Artem Korolev <kor...@gmail.com>
Дата: Thu, 5 Nov 2009 00:31:59 +0300
Місцевий час: Ср 4 Лис 2009 23:31
Тема: Каким образом можно перебрать все контроллеры и экшены приложения?

Уважаемое сообщество!
Прошу подсказать, в каком направлении копать...


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
pyromaniac -  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 5 Лис, 00:25
Від: pyromaniac - <kinwiz...@gmail.com>
Дата: Thu, 5 Nov 2009 01:25:10 +0300
Місцевий час: Чт 5 Лис 2009 00:25
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

Насчёт контроллеров - в продакшн среде просто
ApplicationController.subclasses, в остальных, где классы перезагружаются -
сложнее. Что-то типа:

          controllers_paths = $LOAD_PATH.select { |path|
path.match(/\/controllers$/) }
          controllers = []
          controllers_paths.each do |path|
            Dir.glob(File.join(path, '*_controller.rb')).each do |f|
              controllers << File.basename(f).gsub( /^(.+).rb/,
'\1').camelize
            end
          end
          controllers

По крайней мере, я эту проблему примерно так решил. Но тут ещё нужно учесть
контроллеры в неймспейсах.

А по поводу экшенов - даже не знаю, если приложение - рестфул - то можно из
роутов повытаскивать.

5 ноября 2009 г. 0:31 пользователь Artem Korolev <kor...@gmail.com> написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 5 Лис, 01:39
Від: Artem Korolev <kor...@gmail.com>
Дата: Thu, 5 Nov 2009 02:39:33 +0300
Місцевий час: Чт 5 Лис 2009 01:39
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

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

5 ноября 2009 г. 1:25 пользователь pyromaniac - <kinwiz...@gmail.com>написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
alovak  
Переглянути профіль  
 Більше налаштувань 5 Лис, 11:20
Від: alovak <alo...@gmail.com>
Дата: Thu, 5 Nov 2009 01:20:24 -0800 (PST)
Місцевий час: Чт 5 Лис 2009 11:20
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?
Можно вот так ещё сделать:

module ActionController::Routingю
  def self.controllers_actions
    Routes.routes.collect do |route|
      route.requirements unless route.requirements.empty?
    end
  end
end

ActionController::Routing.controllers_actions =>
[{:controller=>"session", :action=>"index"},
{:controller=>"merchant_dashboard", :action=>"index"}, ..]

но, как понимаете это из роутингов. Если в роутах не прописан
контроллер/action или дефолтные есть типа  :controller/:action то
здесь его тоже не будет.

Второй вариант, как написали: через файлы.

On 4 ноя, 23:31, Artem Korolev <kor...@gmail.com> wrote:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 6 Лис, 20:42
Від: Artem Korolev <kor...@gmail.com>
Дата: Fri, 6 Nov 2009 21:42:46 +0300
Місцевий час: Пт 6 Лис 2009 20:42
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

Частично разобрался: экшены можно извлечь с помощью TestController*
.action_methods*
*Возвращает => #<Set: {"new", "index"}>
*По поводу контроллеров буду искать дальше...

5 ноября 2009 г. 0:31 пользователь Artem Korolev <kor...@gmail.com> написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 6 Лис, 20:58
Від: Artem Korolev <kor...@gmail.com>
Дата: Fri, 6 Nov 2009 21:58:10 +0300
Місцевий час: Пт 6 Лис 2009 20:58
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

По поводу контроллеров наверное придется воспользоваться этим (из исходников
rails):

*
*

*>**> ActionController::Routing.possible_controllers
=> ["rails/info", "rails_info", "application", "test"]*

5 ноября 2009 г. 0:31 пользователь Artem Korolev <kor...@gmail.com> написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 6 Лис, 20:59
Від: Artem Korolev <kor...@gmail.com>
Дата: Fri, 6 Nov 2009 21:59:17 +0300
Місцевий час: Пт 6 Лис 2009 20:59
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

То что нашлось, это совсем грабли?

5 ноября 2009 г. 0:31 пользователь Artem Korolev <kor...@gmail.com> написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 6 Лис, 22:44
Від: Artem Korolev <kor...@gmail.com>
Дата: Fri, 6 Nov 2009 23:44:53 +0300
Місцевий час: Пт 6 Лис 2009 22:44
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

В общем получилась такая конструкция, если кому-нибудь будет полезна
пользуйтесь, в development среде работает, вложенные контроллеры
обрабатывает:

def ControllersActions
  unused = %w(rails/info rails_info application)
  controllers = ActionController::Routing.possible_controllers - unused
  result = Hash.new
  for i in 0..controllers.size-1 do
    controller = controllers[i].capitalize.split('/').inject {|name, word|
name + "::" + word.capitalize} + 'Controller'
    result[controller] = eval(controller).action_methods.to_a
  end
end

В результате hash:

>> result

=> {"Admin::Test3Controller"=>["new", "test3", "index"],
"Admin::User::Test4Controller"=>["new", "test4", "index"],
"TestController"=>["new", "index"], "Admin::TestController"=>["new",
"index"], "Test2Controller"=>["delete", "new", "index"]}

5 ноября 2009 г. 0:31 пользователь Artem Korolev <kor...@gmail.com> написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Artem Korolev  
Переглянути профіль   Перекласти вказаною мовою: Перекладено (переглянути оригінал)
 Більше налаштувань 7 Лис, 22:02
Від: Artem Korolev <kor...@gmail.com>
Дата: Sat, 7 Nov 2009 23:02:10 +0300
Місцевий час: Сб 7 Лис 2009 22:02
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?

И еще одна доводка (забыл про контроллер вида credit_card_controller.rb)

def ControllersActions
  unused = %w(rails/info rails_info application)
  controllers = ActionController::Routing.possible_controllers - unused
  result = Hash.new
  for i in 0..controllers.size-1 do
    controller = controllers[i].capitalize.gsub(/\/\w/){|match|
'::'+match.to_s.upcase[1].chr}.gsub(/_\w/){|match|
match.to_s.upcase[1].chr}+'Controller'
    result[controller] = eval(controller).action_methods.to_a
  end
end

6 ноября 2009 г. 23:44 пользователь Artem Korolev <kor...@gmail.com>написал:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Alex  
Переглянути профіль  
 Більше налаштувань 7 Лис, 23:18
Від: Alex <alexander.uva...@gmail.com>
Дата: Sat, 7 Nov 2009 13:18:47 -0800 (PST)
Місцевий час: Сб 7 Лис 2009 23:18
Тема: Re: Каким образом можно перебрать все контроллеры и экшены приложения?
Все контроллеры можно перебрать если заюзать это http://www.raulparolari.com/Ruby2/inherited
Ну а экшены через action_methods

On Nov 8, 1:02 am, Artem Korolev <kor...@gmail.com> wrote:


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
Кінець повідомлень
« Повернутися до обговорень « Новіша тема     Старіша тема »

Створити групу - Групи Google - Домашня сторінка Google - Правила користування послугою - Заява про конфіденційність і нерозголошення інформації
©2009 Google