Tag: 成语

有没有更好的方法来编写这个named_scope?

我正在使用此named_scope来搜索具有与用户输入的任何单词匹配的描述的产品。 例如, Product.description_like_any(“choc pret”) 将返回名称为的产品 “巧克力吧” “巧克力覆盖椒盐卷饼” “迷你巧克力小马” 这是我写的named_scope(有效) named_scope :description_like_any, (lambda do |query| return {} unless query conditions = [] values = [] for q in query.split(/\s+/) conditions << "(`products`.description LIKE ?)" values < [conditions.join(‘ AND ‘), *values] } end) 有没有更好的方法来写这个? 也许我错过了一两个Rubyism / Railism? 解 将scope_procedure与Searchlogic结合使用,可以更简单的方式完成。 注意,该解决方案甚至可以利用Searchlogic的_or_语法将两个范围连接在一起。 :keywords scope_procedure查找与product.description或product.vendor.name匹配的product.vendor.name ; 全部有一个文本字段! 模型 # app/models/product.rb […]

Rails 3:在rails中使用JSON响应REST-ful操作的正确方法是什么?

我正在尝试使用对RESTful资源控制器的JSON响应为我的rails应用程序创建API。 这对我来说是一次全新的体验,所以我正在寻找一些指导和指导。 开始时: 在rails应用程序中,使用JSON响应REST-ful控制器方法的“正确”方法是什么? (创建,更新,销毁) 是否有通过JSON响应指示成功/失败的惯用方法? 附加信息: 我目前正在使用rails 3.0.beta2 我想避免使用插件或gem进行繁琐的工作,我的目标是更好地理解如何制作rails 3 API。 链接到地方我可以找到有关该主题的更多信息也将不胜感激,一些快速搜索谷歌并没有给我带来太多好处。

使用ruby中的块设置变量

我发现自己在Ruby中经常使用类似PHP的循环,当语言的其余部分如此整洁时感觉不对。 我结束了这样的代码: conditions_string = ” zips.each_with_index do |zip, i| conditions_string < 0 conditions_string << "npa = ?" end # Now I can do something with conditions string 我觉得我应该可以做这样的事情 conditions_string = zips.each_with_index do |zip, i| < 0 << "npa = ?" end 在Ruby中使用块设置变量是否有“整洁”的方法?

这个Ruby成语有更好的替代方案吗?

我发现自己在控制器中编写了这么多代码: params[:task][:completed_at] = Time.parse(params[:task][:completed_at]) if params[:task][:completed_at] 不要特意挂在我在这里做的事情,因为每次都会改变原因; 但是在很多情况下我需要检查params中的值并在将其交给create或update_attributes之前进行更改。 重复params[:task][:completed_at]三次感觉非常糟糕。 有一个更好的方法吗?

当内省模块类时,“#map(&proc)”成语如何工作?

提出成语 我发现了一个有趣但无法解释的替代方案 。 代码显然适用于REPL。 例如: module Foo class Bar def baz end end end Foo.constants.map(&Foo.method(:const_get)).grep(Class) => [Foo::Bar] 但是,我并不完全理解这里使用的习语。 特别是,我不理解使用&Foo ,它似乎是某种闭包,或者#grep的这种特定调用如何对结果进行操作。 解析成语 到目前为止,我已经能够解析其中的一些部分,但我并没有真正看到它们如何组合在一起。 以下是我认为我对示例代码的理解。 Foo.constants返回模块常量数组作为符号。 method(:const_get)使用Object#方法执行方法查找并返回闭包。 Foo.method(:const_get).call :Bar是一个闭包,它返回类中常量的限定路径。 &Foo似乎是某种特殊的lambda 。 文档说: 如果proc对象由&参数给出,&参数将保留技巧。 我不确定我是否完全明白在这个特定背景下这意味着什么。 为什么选择Proc? 什么“诡计”,为什么这里有必要? grep(Class)正在对#map方法的值进行操作,但其function并不明显。 为什么这个#map构造返回一个greppable Array而不是Enumerator? Foo.constants.map(&Foo.method(:const_get)).class => Array 如何为名为Class的类的grepping实际工作,为什么这里需要特定的构造? [Foo::Bar].grep Class => [Foo::Bar] 问题,重申 我真的很想完全理解这个成语。 任何人都可以在这里填补空白,并解释这些碎片是如何组合在一起的吗?

在ruby中,对于以问号结尾的方法名称,是否是真实的惯用语?

带有问号的方法返回一些真实的东西(例如,一个数字)来表示某些东西是真的,或者它本身应该返回,这是正常的吗? 例如,有没有在Ruby标准库或Rails中使用真实性的例子? 背景:有人写了一个String#int? 回答单独问题的方法 ,返回一个表示true的整数, nil表示false。 另一位用户对没有返回布尔值感到惊讶。

使用Ruby中的属性对对象列表进行排序

我有一个叫做basket的Fruit结构清单。 每个Fruit结构都有一个name (一个字符串)和一个calories (一个整数)。 我想对basket进行分类,以便: 具有最高calories的Fruit首先出现。 例如,具有500卡路里的水果出现在具有400卡路里的水果之前。 如果两个Fruit具有相同的calories ,那么name首先按字母顺序排列的Fruit首先出现,忽略大小写。 例如,给定两个具有相同卡路里的水果,一个名为“香蕉”的水果将在一个名为“Citrus”之前出现。 Fruit的定义不是我控制的,所以我更喜欢一种不涉及将任何东西混合到Fruit或改变Fruit的解决方案。 这可能吗?

如果没有arg,则运行stdin的脚本; 否则输入文件= ARGV

这很好用 – 只是想知道是否有任何改进来缩短它? if (ARGV[0].nil?) then input=$< else input=File.new(ARGV[0],"r"); end … # Do something with the input here, for example: input.each_line do |line| puts line end