为rails中的活动记录创建过滤器

时间:2015-12-23 18:27:43

标签: ruby-on-rails ruby ruby-on-rails-4

刚开始使用Ruby on Rails编写代码,并设法为我的应用程序创建基本的CRUD功能。

我也可以列出所有这些。 现在我想为用户创建一个过滤器来进行交互。

Database Schema
create_table "nades", force: :cascade do |t|
   t.string   "title"
   t.integer   "grenade"
   t.text     "description"
   t.datetime "created_at"
   t.datetime "updated_at"
   t.integer  "map_id"
end

“手榴弹”的值可以是1-4,对应于特定的手榴弹:

[[1,"smoke"], [2,"flash"], [3,"molotov"], [4,"he-grande"]

现在我正在尝试在视图中创建一个包含4个按钮的过滤器。您可以在其中打开/关闭每个nade以在结果中显示或隐藏它们。

[x]Smoke [ ]Flash [ ]Moltov [x]HE

这应该只返回nades where grenade = [1,4]

经过一些阅读后,看起来scoped会很好用来管理它。 但是我不知道如何让它按照我的意愿运作。

正在考虑做类似的事情:

scope :by_nade, -> grenade { where(grenade: grenade) if status.grenade? }

然而,这只允许我从数据库中获取1个特定的nade类型。 是否可以发送多个参数,如:

http://localhost:3000/nades/?by_nade=1,2 ??

或者它是解决我问题的更好方法吗?

1 个答案:

答案 0 :(得分:0)

查看使用一系列选项创建表单(例如here)。这样您就可以获得特定类型手榴弹的多个值。

您的作用域可以使用单个id 一组id,并且使用选项数组方法应该生成一个可以工作的数组。在上面的例子中,它实际上是Nade.by_grenade([1,4])。您可能希望防止数组为空(假设空列表是一件坏事)。