首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在rails中过滤集合

如何在rails中过滤集合
EN

Stack Overflow用户
提问于 2016-10-21 06:48:07
回答 2查看 218关注 0票数 0

我是Rails的新手,我正在尝试通过它们的一个属性来过滤我数据库中的动物。我读到过,我可以通过控制器中的一个作用域,并通过URL上的一个参数来访问它,但我认为这对我不起作用,因为我使用循环来创建HTML。

有没有办法将过滤器添加到我正在使用的集合中(@animals)?

代码语言:javascript
代码运行次数:0
运行
复制
<% @animals.each do |animal| %>
  <li>
    <a href="#">
      <%=link_to animal.ncommon, animal %>
    </a>
  </li>
<% end %>

我希望我的问题已经说清楚了。谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2016-10-21 07:13:38

因此,最佳实践是将scope移动到模型中,而不是控制器中。下面是一个例子。(请注意,这可能会根据您的文件结构和名称而变化)。

在这里,我将按类型过滤动物。假设类型1和类型2。

代码语言:javascript
代码运行次数:0
运行
复制
#model app/models/animal.rb
class Animal < ActiveRecord::Base
  scope :by_type, -> (ty) { where(type: ty) }
end

#controller app/controllers/animals_controller.rb

class AnimalsController < ApplicationController
  ... other code

  def index
    # calls the by_type method/scope in the Animal model
    # filter the records and assignes them to @animals varaible
    @animals = Animal.by_type(params[:type])
  end

  ... other code 
end

然后你可以在视图中使用你的循环。当您想要过滤时,可以使用一个参数调用索引操作

例如http://localhost:3000/animals?type=1

因此,我们的想法不是在循环内部进行过滤,而是将过滤后的结果传递给@animals变量。

票数 0
EN

Stack Overflow用户

发布于 2016-10-21 23:32:25

我刚刚找到了一个可以在循环中使用的解决方案。我改变了:

代码语言:javascript
代码运行次数:0
运行
复制
<% @animals.each do |animal| %>

至:

代码语言:javascript
代码运行次数:0
运行
复制
<% @animals.where("promo > ?", 0).each do |animal| %>

在这里,我得到了所有的动物,其促销大于零。

谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40165722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档