当我加载脚本/控制台时,有时我想使用控制器或视图助手方法的输出。
有没有办法:
模拟一个请求? 从控制器实例调用方法说请求? 测试助手方法,无论是通过所说的控制器实例或其他方式?
当我加载脚本/控制台时,有时我想使用控制器或视图助手方法的输出。
有没有办法:
模拟一个请求? 从控制器实例调用方法说请求? 测试助手方法,无论是通过所说的控制器实例或其他方式?
当前回答
如果你已经添加了自己的helper,并且希望它的方法在控制台中可用,请执行以下操作:
在控制台执行包含YourHelperName 你的助手方法现在在控制台中可用,在控制台中使用它们调用method_name(args)。
例如:假设你在'app/helpers/my_helper中有MyHelper(使用my_method方法)。Rb ',然后在控制台执行:
包括MyHelper my_helper.my_method
其他回答
前面的答案是调用助手,但下面的答案将有助于调用控制器方法。我已经在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将被转储到控制台。
另一种方法是使用Ruby on Rails调试器。http://guides.rubyonrails.org/debugging_rails_applications.html上有一个关于调试的Ruby on Rails指南
基本上,使用-u选项启动服务器:
./script/server -u
然后在脚本中插入一个断点,在这个断点中您可以访问控制器、助手等。
class EventsController < ApplicationController
def index
debugger
end
end
当您发出请求并点击代码中的该部分时,服务器控制台将返回一个提示符,然后您可以从命令提示符发出请求、查看对象等。完成后,只需输入'cont'继续执行。也有扩展调试的选项,但这至少可以让您开始。
如果方法是POST方法,那么:
app.post 'controller/action?parameter1=value1¶meter2=value2'
(这里的参数将根据您的适用性而定。)
如果是GET方法,则:
app.get 'controller/action'
在Ruby on Rails 3中,试试这个:
session = ActionDispatch::Integration::Session.new(Rails.application)
session.get(url)
body = session.response.body
主体将包含URL的HTML。
如何路由和呈现(调度)从一个模型在Ruby on Rails 3
从脚本/控制台和视图/操作响应对象调用控制器动作的简单方法是:
> 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.
app对象是ActionController::Integration::Session的实例
在我使用Ruby on Rails 2.1和2.3时,这是可行的,我没有尝试更早的版本。