草庐IT

ruby - 有没有一种简单的方法可以在 Ruby 中获取图像尺寸?

我正在寻找一种无需使用ImageMagick或ImageScience(运行SnowLeapard)即可在Ruby中获取图像文件的宽度和高度尺寸的简单方法。 最佳答案 截至2012年6月,FastImage其中“通过根据需要尽可能少地获取给定uri来找到图像的大小或类型”是一个不错的选择。它适用于本地镜像和远程服务器上的图像。自述文件中的IRB示例:require'fastimage'FastImage.size("http://stephensykes.com/images/ss.com_x.gif")=>[266,56]#wid

ruby-on-rails - 有没有一种干净的方法来避免在嵌套的参数哈希中调用 nil 上的方法?

这个问题在这里已经有了答案:HowtoavoidNoMethodErrorformissingelementsinnestedhashes,withoutrepeatednilchecks?(16个答案)关闭7年前。我对获取参数哈希的嵌套“名称”参数很感兴趣。调用类似的东西params[:subject][:name]当params[:subject]为空时抛出错误。为了避免这个错误,我通常会这样写:ifparams[:subject]&¶ms[:subject][:name]有没有更简洁的方法来实现它?

ruby-on-rails - 有没有办法在 Rails 3.1 中检测用户代理

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Autodetectmobilebrowser(viauser-agent?)Rails3:HTTP_USER_AGENT有没有办法检测当前访问者的用户代理?我目前正在从事一个显示视频文件的项目。但对于ipad、iphone/samsunggalaxytab/internetexplorer/firefox。我需要显示视频,是否有可靠的方法来检查哪个浏览器正在访问我的Rails应用程序?谢谢大家!

ruby - 有没有办法通过散列来初始化对象?

如果我有这个类:classAattr_accessor:b,:c,:dend和这段代码:a=A.newh={"b"=>10,"c"=>20,"d"=>30}是否可以直接从散列初始化对象,而不需要遍历每一对并调用instance_variable_set?像这样的东西:a=A.new(h)这应该会导致每个实例变量被初始化为在散列中具有相同名称的变量。 最佳答案 你可以在你的类上定义一个初始化函数:classAattr_accessor:b,:c,:ddefinitialize(h)h.each{|k,v|public_send("#{

ruby - 当没有 block 传入时,有没有更好的方法来防止 'yield'?

我有一个yield方法,它看起来像:defa_method(*params)#dosomethingyield#dosomethingelseend如果传入block,我希望此方法产生block;如果没有block传入,该方法应该悄悄地跳过yieldsentense而不会崩溃:noblockgiven(yield)(LocalJumpError)当然,最直接的方法就是把方法改成:defa_method(*params,&block)#dosomethingyieldifblock#dosomethingelseend但是没有更漂亮的方法吗? 最佳答案

ruby - 有没有办法在 RSpec 中取消 stub ?

搜索了Relish文档,但没有找到在RSpec中取消stub的方法。这可能吗? 最佳答案 使用新的expect语法,不推荐使用unstub。你可以这样做:#stuballow(SomeClass).toreceive(:a_method)#dosomething...#unstuballow(SomeClass).toreceive(:a_method).and_call_original如果第一个allow包含.with或一个block,我相信它仍然会进行到下一个调用,所以下一个allow不会清除那些东西。

ruby - 有没有办法从该实例内部为 Ruby 类的实例创建方法?

让classExample定义为:classExampledefinitialize(test='hey')self.class.send(:define_method,:say_hello,lambda{test})endend调用Example.new;Example.new我收到一个警告:方法已重新定义;丢弃旧的say_hello。我得出结论,这一定是因为它在实际类中定义了一个方法(从语法上看是有道理的)。当然,如果Example的多个实例在其方法中具有不同的值,那将是灾难性的。有没有办法从实例内部为类的实例创建方法? 最佳答案

ruby - 在 Ruby 中,有没有办法使用类似 hash.each_with_index do |[k,v], i| 的方法?

否则就需要h={:a=>1,:b=>2.2}h.each_with_indexdo|pair,i|k=pair[0];v=pair[1]pk,v,iend并以这种方式设置k和v似乎有点笨拙。它可以更简单还是类似h.each_with_indexdo|[k,v],i|? 最佳答案 事实上,是的!使用括号:h={:a=>1,:b=>2.2}h.each_with_indexdo|(k,v),i|pk,v,iend 关于ruby-在Ruby中,有没有办法使用类似hash.each_with_i

ruby-on-rails - Ruby/Rails 有没有办法执行字符串中的代码?

所以我有一个包含不同代码示例(阅读片段)的数据库。代码示例由用户创建。在Rails中有没有办法执行它?例如,我的数据库中有以下代码(id=123):return@var.reverse有没有办法让我执行它?像这样的东西:@var='Hello'@result=exec(CodeSample.find(123))所以结果会是'olleH' 最佳答案 您可以使用eval:code='@var.reverse'@var='Hello'@result=eval(code)#=>"olleH"但是这样做要非常小心;您授予该代码对您系统的完全访

ruby-on-rails - 如果我在 Ruby on Rails 中有一个散列,有没有办法让它无差别访问?

如果我已经有一个散列,我可以这样做吗h[:foo]h['foo']是一样的吗?(这叫冷漠访问吗?)详细信息:我在initializers中使用以下内容加载了此哈希,但可能不会有什么不同:SETTINGS=YAML.load_file("#{RAILS_ROOT}/config/settings.yml") 最佳答案 您可以只使用with_indifferent_access。SETTINGS=YAML.load_file("#{RAILS_ROOT}/config/settings.yml").with_indifferent_ac