草庐IT

ruby-on-rails - Rack 和 rack.request.form_vars/rack.request.form_hash

我正在做一些中间件,在它到达Rails之前更改authenticity_token参数。我可以看到env.inspect给出了rack.request.form_vars和rack.request.form_hash。两者都包含真实性token。Rails使用哪一个?为什么Rack两者都提供? 最佳答案 让我们看看源码吧!这两个变量都来自使用Rack::Request辅助类。它为请求参数提供了一个很好的接口(interface)。Rack应用程序不需要使用它,但Rails确实会使用它。变量供Rack::Request内部使用。rac

ruby-on-rails - 获取 Hash 对象的循环次数

我有一个Hash类型的对象,我想通过hash.eachdo|key,value|对其进行循环。我想获得从1开始的循环次数。是否有类似于each的方法提供此功能(同时仍提供散列键/值数据),或者我是否需要创建另一个计数器变量以在循环内递增? 最佳答案 使用each_with_index而不是each。注意:索引确实从0开始:hash.each_with_indexdo|(key,value),index| 关于ruby-on-rails-获取Hash对象的循环次数,我们在StackOver

ruby - 如何将 ruby​​ hash 转为 value 成为指向一组旧键的键?

我有这样的哈希:t={"4nM"=>"Triangle","I40"=>"Triangle","123"=>"Square"}我想把它变成像这样的散列:{"Triangle"=>["4nM","I40"],"Square"=>["123"]}执行此操作的最佳方法是什么?我从group_by开始,但是代码变得有点复杂....这是我做的:t.group_by{|k,v|v}.map{|type,group|{type=>group.flatten.reject{|x|x==type}}} 最佳答案 h={"4nM"=>"Triangle

ruby-on-rails - Hash.except() 不适用于符号键

我有一段代码,其中这一行:user.attributes.except('created_at','created_by','updated_at','updated_by','id')有效(返回带有作为参数传递的键的散列,从中移除),同时将其更改为:user.attributes.except(:created_at,:created_by,:updated_at,:updated_by,:id)没有(返回的散列仍然包含所有键)。这怎么可能? 最佳答案 因为attributes返回一个Hash,其键为字符串而不是符号。http:/

ruby - 如何在 hash-bang 可执行文件中引用本地 ruby​​?

我有一个以开头的Ruby可执行文件(它是一个bundlerbinstub)#!/usr/bin/envruby在我的服务器上,我通过RVM安装了Ruby193。$whichruby->/home/dtuite/.rvm/rubies/ruby-1.9.3-p0/bin/ruby在我的本地机器上,我也通过RVM安装了Ruby,但是在不同的位置(很明显!)$whichruby->/Users/davidtuite/.rvm/rubies/ruby-1.9.3-p0/bin/ruby当我尝试在服务器上运行这个可执行文件时出现错误/usr/bin/env:ruby:Nosuchfileordi

Ruby Hash 在 1.8.7 和 1.9.2 中的区别

给定以下脚本,我看到使用Ruby1.8.7和Ruby1.9.2的不同输出。我的问题是,强制执行此特定行为的Ruby哈希发生了什么变化?defto_params(_hash)params=''stack=[]_hash.eachdo|k,v|ifv.is_a?(Hash)stack["some_val"],"another_key"=>["another_val"]}n=convert_params(q)putsnRuby1.8.7输出:some_key=some_val&another_key=another_valRuby1.9.2输出:some_key=["some_val"]&a

ruby - 将 to_hash(或 to_h)方法添加到 Struct 的优雅方式?

我在项目中使用结构而不是简单的哈希来为键值对集合提供语义名称。然而,一旦构建了结构,我就需要输出一个散列值。我在Ruby1.9.3中。示例:MyMeaninfulName=Struct.new(:alpha,:beta,:gamma)dodefto_hashself.members.inject({}){|h,m|h[m]=self[m];h}endendmy_var=MyMeaningfulName.newmy_var.to_hash#->{:alpha=>nil,:beta=>nil,:gamma=>nil}Struct不包含to_hash方法是有原因的吗?这似乎是天作之合,但也许

ruby - Hash[] vs to_h,它们是否相同,如果相同,哪个更好?

这些似乎是相同的。是否存在偏好、性能差异等?Hash[[[:a,'foo'],[:b,'bar']]]#=>{:a=>"foo",:b=>"bar"}[[:a,'foo'],[:b,'bar']].to_h#=>{:a=>"foo",:b=>"bar"} 最佳答案 它们不一样。两者都可以采用数组数组:Hash[[[1,2],[3,4]]]#=>{1=>2,3=>4}[[1,2],[3,4]].to_h#=>{1=>2,3=>4}但除此之外,Hash.[]还有更多古怪的语法。它可以直接接受元素:Hash[1,2,3,4]#=>{1=>

ruby - 是{ 'symbol name' : "some value" } valid Ruby 2 syntax for Hashes?

TL;DR——问题{'symbolname':5}和{"symbolname":5}是否有效且定义明确的Ruby2哈希语法?6种哈希符号,其中2种未知在Ruby2中,以下Hash文字符号是等效的:{:my_key=>5}{my_key:5}{:'my_key'=>5}{:"my_key"=>5}第一行是通用的哈希文字表示法(也适用于非符号键),键使用默认的符号文字表示法。第二行是Ruby2引入的新的简写符号Ruby1.9用于以符号为键的哈希。第三行同样是通用的Hash字面量表示法,键带有替代的Symbol字面量表示法。(如果您需要在符号名称中包含空格或其他花哨的字符,则此替代符号文字表

ruby - 主模块中名为 `hash` 的方法覆盖了某些对象的 `hash` 方法

给定这个脚本defhashputs"why?"endx={}x[[1,2]]=42输出如下why?/tmp/a.rb:6:in`hash':noimplicitconversionofnilintoInteger(TypeError)from/tmp/a.rb:6:in`'在那种情况下,脚本中定义的hash函数似乎覆盖了Array#hash。由于我的hash方法的返回值是nil而不是Integer,它会抛出异常。下面的脚本似乎证实了这一点puts[1,2,3].hashdefhashputs"why?"endputs[1,2,3].hash输出是-4165381473644269435