我正在升级到Rails 3.2,运行rake db:migrate会给我带来几个错误:
弃用警告:您在供应商/插件中拥有Rails 2.3风格的插件!在Rails 4.0中将删除对这些插件的支持.移出它们并将它们捆绑在Gemfile中,或者将它们作为lib/myplugin/*和config/initializers/myplugin.rb折叠到您的应用程序中.有关详细信息,请参阅发行说明:http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released.(从/ app/Rakefile调用:7)
令人困惑的是我的vendor/plugins目录是空的 - 是否有另一个引用的插件目录?
在Ruby/Rails中,如何将UTC DateTime转换为另一个时区?
如何将字符串转换为类名,但仅限于该类已存在?
如果Amber 已经是一个类,我可以通过以下方式从字符串到类:
Object.const_get("Amber")
Run Code Online (Sandbox Code Playgroud)
或(在Rails中)
"Amber".constantize
Run Code Online (Sandbox Code Playgroud)
但NameError: uninitialized constant Amber如果Amber还没有上课,那么其中任何一个都会失败.
我的第一个想法是使用该defined?方法,但它不区分已存在的类和不存在的类:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
Run Code Online (Sandbox Code Playgroud)
那么在我尝试转换之前,如何测试字符串是否命名一个类?(好吧,begin/ rescueblock如何捕获NameError错误?太丑了?我同意......)
puts "hi"
puts "bye"
Run Code Online (Sandbox Code Playgroud)
我想存储到目前为止的代码的STDOUT(在这种情况下,hi \nbye变成一个变量说'结果'并打印出来)
puts result
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是我已经将R代码集成到我的Ruby代码中,当R代码运行时,其输出被提供给STDOUT,但是在代码内部无法访问输出以进行一些评估.对不起,如果这令人困惑.因此,"放置结果"这一行应该让我高兴和再见.
我有一个"软件即服务"应用程序,它使用通过RESTful API传递的JSON.
简单地说:在使用带有JSON数据交换的RESTful API时,捕获和报告异常的最佳实践是什么?
我的第一个想法是通过生成脚手架来看看Rails的作用,但这显然是不对的.这是一段摘录:
class MumblesController < ApplicationController
# GET /mumbles/1
# GET /mumbles/1.json
def show
@mumble = Mumble.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @mumble }
end
end
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果JSON代码发送不存在的ID,例如
http://www.myhost.com/mumbles/99999.json
Run Code Online (Sandbox Code Playgroud)
那么Mumble.find()将引发ActiveRecord :: RecordNotFound.ActionController将捕获它并在HTML中呈现错误页面.但HTML对于期望JSON的客户端来说是无用的.
我可以通过将Mumble.find()包装在一个begin ... rescue RuntimeError块中并渲染JSON status =>:unprocessable_entity等来解决这个问题.
但是,如果客户端的应用程序发送无效路径,例如:
http://www.myhost.com/badtypo/1.json
Run Code Online (Sandbox Code Playgroud)
是一个基于JSON的应用程序应该捕获并返回JSON中的错误?如果是这样,我在哪里捕获它而不深入ActionDispatch?
总的来说,如果出现错误,我是否应该让ActionController生成HTML?那感觉不对......
我有一个看起来像这样的文件:
<div id="block">
<a href="http://google.com">link</a>
</div>
Run Code Online (Sandbox Code Playgroud)
我无法让Nokogiri获得href属性的价值.我想将地址存储在Ruby变量中作为字符串.
这应该很简单,我发誓这是一个小时前工作的.我可以登录Heroku,但无法运行任何有用的命令:
$ heroku login
Enter your Heroku credentials.
Email: xxx@whatever.com
Password:
$ heroku stack
App not found
$ heroku config
App not found
Run Code Online (Sandbox Code Playgroud)
也许这是问题的根源?
$ git remote show heroku
! No such app as empty-samurai-345
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
empty-samuri-345是我之前删除的应用程序.我真正想做的就是使用bamboo-mri-1.9.2堆栈上传一个新的应用程序.
提前感谢您的建议......
我有一个页面的路径是(例如)/ premises/92我正在显示"请[登录]或[注册]以获取更多信息"如果用户没有登录,我想要设计返回相同的用户登录后的/ premises/92页面.
我已经阅读了其他帖子,我想我理解设计stored_location_for应该如何工作.理论上,我可以把这样的东西放在我的ApplicationController:
def stored_location_for(resource)
if (r = session[:return_to])
session[:return_to] = nil
r
else
super
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何/在哪里设置会话[:return_to]?
我只想在用户点击[登录]或[注册]时设置会话[:return_to],但最好的方法是什么?
?return_to=/premises/92查询字符串添加到[登录]和[注册]链接,并在RegistrationsController和SessionsController中检测并使用该信息设置会话[:return_to]?这似乎会起作用,但也很苛刻.这些都闻不对劲.为stored_location_for设置状态的普遍接受的技术是什么?
我在Ruby工作,但我的问题也适用于其他语言.
我有一个机械化驱动的应用程序.我正在谈论的服务器使用JavaScript(而不是标准的set-cookie)设置cookie,因此Mechanize不会捕获cookie.我需要在下一个GET请求中传回该cookie.
好消息是我已经知道cookie的价值,但我不知道如何告诉Mechanize将它包含在我的下一个GET请求中.
我的Rails应用程序有关于何时应在页面上显示一些内容的复杂规则.我决定通过在Ruby中编写谓词(简单的"是/否"函数)并将它们存储在数据库中以便随后进行评估来实现这一点.这很简单.
我主要担心的是安全性:如果恶意某人弄清楚如何写入数据库,他们可能会在数据库中粘贴任意Ruby代码,然后" 所有基础都属于我们 ".
那么是否可以创建一个"沙盒"eval,例如,删除了所有IO操作?