Tag: ruby

Ruby块语法错误

可能重复: Ruby块和非私有的参数 我不确定我是否理解这个语法错误。 我正在使用Carrierwave在Rails应用程序中pipe理一些file upload,而且我似乎正在错误地将一个块传递给其中一个方法。 以下是Carrierwave Docs中的示例: version :thumb do process :resize_to_fill => [200,200] end 这是我所拥有的: version :full { process(:resize_to_limit => [960, 960]) } version :half { process(:resize_to_limit => [470, 470]) } version :third { process(:resize_to_limit => [306, 306]) } version :fourth { process(:resize_to_limit => [176, 176]) } 上述不起作用,我得到syntax error, unexpected '}', expecting keyword_end 。 […]

理解 .each(&:my_method)

可能重复: 在Ruby中map(&:name)是什么意思? 我正在看railscast,看到这个代码。 [Category, Product].(&:delete_all) 关于清理数据库。 我询问了IRC的线路,并被告知 (&:delete_all) 是一个捷径 {|model| model.delete_all} 我testing了以下内容 class ClassOne def class_method puts 1 end end class ClassTwo def class_method puts 2 end end [ClassOne, ClassTwo].each(&:class_method) 我收到一个错误说 Wrong Argument type Symbol (expected Proc) 我也试过了 one = ClassOne.new two = ClassTwo.new [one, two].each(&:class_method) 但是那仍然失败了。 如果我修改它来阅读 [one, two].each{|model| model.class_method} 一切按预期工作。 那么, &:delete_all实际上是做什么的? 文档说delete_all是一种方法,所以我对这里发生的事情感到困惑。

Ruby多行块没有做结束

我是Ruby的初学者,所以我很抱歉问这么简单,但是这个代码有什么问题 – 3.upto(9) { print "Hello" puts " World" } 要么 3.upto(9) { |n| print "Hello " puts n } 它工作得不错,但我看到的大部分代码示例使用的语法 3.upto(9) do |n| print "Hello " puts n end 仅仅使用大括号来表示单个语句只是惯例? 来自C / C#的第一个看起来对我来说更自然,但是在罗马时!

Ruby中“&:capitalize”究竟是什么?

我刚刚阅读这个答案使用Ruby将大写string转换为标题大小写 。 有下面这行代码 "abc".split(/(\W)/).map(&:capitalize).join 究竟是什么&:capitalize ? 在我把它写入irb之前,我会告诉你,这不是有效的ruby语法。 它必须是某种Proc对象,因为Array#map通常需要一个块。 但事实并非如此。 如果我单独将它放入irb syntax error, unexpected tAMPER 。

什么时候使用RSpec let()?

我倾向于在块之前使用设置实例variables。 然后我在这些例子中使用这些variables。 我最近遇到let() 。 根据RSpec文档,它已经习惯了 …定义一个记忆辅助方法。 该值将在同一个示例中跨多个调用进行caching,但不会跨越示例。 这与在前面块中使用实例variables有什么不同? 还应该什么时候使用let() vs before() ?

有没有一个干净的方法,以避免调用一个嵌套的参数哈希零的方法?

我有兴趣获取params散列的嵌套的“名称”参数。 调用类似 params[:subject][:name] 当params [:subject]为空时抛出一个错误。 为了避免这个错误,我通常会写这样的东西: if params[:subject] && params[:subject][:name] 有没有一个更清晰的方式来实现这一点?

在Ruby中最好的方法来逃避和unescapestring?

Ruby是否有任何内置的方法来转义和转义string? 在过去,我使用正则expression式; 然而,我发现Ruby可能会一直在内部进行这样的转换。 也许这个function暴露在某个地方。 到目前为止,我已经提出了这些function。 他们工作,但他们似乎有点hacky: def escape(s) s.inspect[1..-2] end def unescape(s) eval %Q{"#{s}"} end 有没有更好的办法?

instance_eval如何工作,DHH为什么讨厌它?

在他的RailsConf演讲中大约在19:00,David Heinemeier Hansson谈到了instance_eval的缺点: 很长一段时间,我狂妄地反对instance_eval ,这是不使用屈服参数的概念(像do |people| ),只是直接do something ,然后评估你从哪里来的范围内的块(I甚至不知道这是一个连贯的解释) 很长一段时间我不喜欢那样,因为在某种意义上感觉更复杂。 如果你想把自己的代码放在那里,你会触发已经存在的东西吗? 你打算重写什么吗? 当你产生一个特定的variables时,你可以把所有的东西都连接起来,你可以知道(你并没有搞乱其他人的东西) 这听起来很有趣,但是a)我不知道instance_eval是如何工作的,b)我不明白为什么它可能会导致错误/增加复杂性。 有人可以解释吗?

在Rails中使用attr_accessor

什么attr_accessor在Rails模型中使用attr_reader / attr_writer / attr_accessor ?

在Rails 3视图中,删除链接发送“Get”而不是“Delete”

我正在使用Rails 3,并有一个从数据库中输出post列表的页面。 我希望能够从链接中删除post。 下面的第二个例子工作,但第一个没有。 有人知道为什么第一个不行? 我的观点包含: # this link sends a "GET" request which asks for the #show function <%= link_to 'Delete', post, :method => :delete %> # this link sends the proper "DELETE" request which asks for the #destroy function <%= button_to 'Delete', post, :method => :delete %> 我的路线文件包含以下内容: resources :posts