case..when..else当你需要将标准与单个变量匹配时,Ruby有一个相当强大的构造.在不简单地嵌套case语句的情况下,将标准与多个变量匹配的"规范"方法是什么?
在数组中包装多个变量(如[x, y])并与之匹配并不等效,因为Ruby不会将魔法case ===运算符应用于数组的元素 ; 运算符仅适用于数组本身.
我将继续前进并回答社区维基的回答,并在这个问题上进行了(击败).
具体来说,我们假设我们有两个合理的模型:
TieDyeCentipede, 哪一个 has_many :legsLeg,它有一个:color属性.作为一个TieDyeCentipede,没有两条腿是相同的颜色.事实上,特定腿部的颜色在我们所有的腿部中都是独一无二的TieDyeCentipedes.
基于这种独特性,我们希望Centipede通过特定颜色的腿找到一个特定的 - 比方说:deep_sky_blue.
我可以这样做:
critter = Leg.find_by_color(:deep_sky_blue).tie_dye_centipede
但是,我可以使用find_by_*这个TieDyeCentipede类的方法吗?
背景在这里.
在上面的链接中,给出了以下示例:
class << self
def by_author(author)
where(:author_id => author.id)
end
end
Run Code Online (Sandbox Code Playgroud)
除了这个语法对像我这样的初学者来说是陌生的 - 我一直认为类方法是用def self.my_class_method - 在哪里可以找到Ruby on Rails中的类方法的文档?
据我所知,类方法总是在类本身(MyClass.my_class_method)上调用,但是如果Rails中的类方法是可链接的,那么似乎必须在其他地方进行其他操作!
编辑:
我想通过对类方法的语法做出评论来欺骗我.我真的在问Rails如何使类方法可链接 - 我理解方法链如何工作,但不知道Rails如何允许链接类方法而不在链中的每个"链接"之后实际返回类对象本身.
我有两个表,一个定义列表,另一个定义列表中的项目.当我运行这个时,我只获得包含引用它们的项目的列表.我真的需要获得列表中所有行的结果以及items表中引用每个列表的行数.
SELECT name, COUNT(items.listId) as itemCount
FROM lists
INNER JOIN items
ON lists._id = items.listId
GROUP BY items.listId
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
在Rails助手中,您可以capture使用该capture方法输出ERB块.但是,如果ERB块需要参数怎么办?capture在这种情况下我该如何使用?
对于一个简单的例子:
<% my_helper(:parameter, models) do |model| %>
<%= model.eye_color %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在该my_helper方法中,我想用块包围每个迭代的输出<span class='color'>...</span>.
我知道我可以捕获ERB块的输出并将其存储在变量中html = capture(&block),但我不知道如何将必要的model参数传递给该块!
我application_helper.rb变得越来越大了.在我的辩护中,它只包含HTML生成方法,并且这些方法都不执行任何类型的业务逻辑.这些方法都不是特定于任何页面或控制器,并且大多数方法彼此无关.
这个问题的典型解决方案是什么?吸了吗?创建其他*_helper.rb文件以吸收一些application_helper方法?
此代码正在执行rescue_from.
redirect_to :root, :notice => 'Mice'
Run Code Online (Sandbox Code Playgroud)
redirect_to :root, :status => 403, :notice => 'Mice'
Run Code Online (Sandbox Code Playgroud)
有类似的问题,但我没有看到最近或完全匹配这种情况.难道我做错了什么?
在我的routes.rb:
get 'contact/index'
Run Code Online (Sandbox Code Playgroud)
如果重要,contact那么控制器只有一种index方法; 它不具有相应的模型.
在我的布局文件中:
<%= link_to 'Contact', contact_path %>
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
undefined local variable or method `contact_path'
Run Code Online (Sandbox Code Playgroud)
我必须给我的路线别名吗?如果是这样,我该怎么做?
以下是相关事实:
每个topic has_many comments.
该Comment模型有一个scope被调用very_popular,我们将假装涉及比较它的几个列.
def self.very_popular
# lots of cool stuff
end
Run Code Online (Sandbox Code Playgroud)该Topic模型有一个scope叫做exciting,其中包括所有topics带very_popular comments.
3号是我被困的地方.以下结果导致缺少方法异常,并且听起来很可怜,我不知道还有什么可尝试的!
def self.exciting
join(:comments).very_popular
end
Run Code Online (Sandbox Code Playgroud)
如何very_popular在Comment模型范围内重用模型中Topic的范围?
假设我想创建一个 HTML 列表助手,它允许我循环遍历集合,并且仅在存在任何列表项时输出<ul>或<ol>标签(我实际上想到的是有点令人讨厌,但这适用于一个例子)。
就像是:
<% html_list(:ul, MyModel.all) do |my_model| %>
<span><%= my_model.id %></span>
<% end %>
Run Code Online (Sandbox Code Playgroud)
(正如你所知,我迷路了。)
我无法理解我的html_list方法会发生什么。你介意给我指出正确的方向吗?