Как я могу вызвать методы контроллера / представления из консоли в Rails?

Извините, что (пере) сообщение здесь, люди часто не раздают комментарии.

Проверьте мой комментарий на crashmstr, FlexeLint / PC-Lint сделает это за вас. Информационное сообщение 766. В этом разделе обсуждается раздел 11.8.1 моего руководства (версия 8.0).

Кроме того, и это важно, продолжайте повторять, пока сообщение не исчезнет. Другими словами, после удаления неиспользуемых заголовков повторно запустите lint, после того, как вы удалите ненужные заголовки, больше файлов заголовков могут стать «ненужными». (Это может показаться глупым, медленно прочитайте его и проанализируйте его, это имеет смысл.)

423
задан kch 29 September 2008 в 23:06
поделиться

5 ответов

Для вызова помощников используйте объект помощника :

$ ./script/console
>> helper.number_to_currency('123.45')
=> "R$ 123,45"

Если вы хотите использовать помощник, который не включен по умолчанию (скажем, потому что вы удалили помощник : all из ApplicationController ), просто включите помощник.

>> include BogusHelper
>> helper.bogus
=> "bogus output"

Что касается работы с контроллерами , я цитирую ответ Ника :

> app.get '/ posts / 1'
> response = app.response
# теперь у вас есть объект ответа rails, очень похожий на интеграционные тесты

> response.body # получите HTML
> response.cookies # хеш файлов cookie

# и т. д. и т. д.
472
ответ дан 22 November 2019 в 23:18
поделиться

Вот один способ сделать это через консоль:

>> foo = ActionView::Base.new
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.extend YourHelperModule
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.your_helper_method(args)
=> "<html>created by your helper</html>"

Создание нового экземпляра ActionView::Base предоставляет Вам доступ к нормальным методам просмотра, которые, вероятно, использует Ваш помощник. Тогда расширение YourHelperModule смеси его методы в Ваш объект, позволяющий Вам просматривать их возвращаемые значения.

73
ответ дан Gordon Wilson 29 September 2008 в 23:06
поделиться

Другой способ сделать это должно использовать отладчик Ruby on Rails. Существует руководство Ruby on Rails об отладке в http://guides.rubyonrails.org/debugging_rails_applications.html

В основном, запустите сервер с-u опции:

./script/server -u

И затем вставляют точку останова в Ваш сценарий, где требуется иметь доступ к контроллерам, помощникам, и т.д.

class EventsController < ApplicationController
  def index
    debugger
  end
end

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

14
ответ дан Peter Mortensen 7 September 2019 в 21:48
поделиться

Более ранние ответы вызывали помощников, но следующие помогут для вызова методов контроллера. Я использовал это в Ruby on Rails 2.3.2.

Сначала добавьте следующий код в ваш .irbrc файл (который может находиться в вашем домашнем каталоге)

class Object
   def request(options = {})
     url=app.url_for(options)
     app.get(url)
     puts app.html_document.root.to_s
  end
end

Затем в консоли Ruby on Rails вы можете ввести что-то вроде. ..

request(:controller => :show, :action => :show_frontpage)

... и HTML будет выгружен в консоль.

7
ответ дан 22 November 2019 в 23:18
поделиться

An easy way to call a controller action from a script/console and view/manipulate the response object is:

> app.get '/posts/1'
> response = app.response
# You now have a Ruby on Rails response object much like the integration tests

> response.body            # Get you the HTML
> response.cookies         # Hash of the cookies

# etc., etc.

The app object is an instance of ActionController::Integration::Session

This works for me using Ruby on Rails 2.1 and 2.3, and I did not try earlier versions.

145
ответ дан 22 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: