如何在Rails中路由一系列参数

时间:2017-07-07 14:22:22

标签: ruby-on-rails ruby

所以我想通过一系列参数传递给Rails中的“测试者”路径。我的测试人员表目前看起来像这样:

class CreateTesters < ActiveRecord::Migration[5.1]
  def change
    create_table :testers do |t|
      t.integer :testerID
      t.string :firstName
      t.string :lastName
      t.string :country
      t.datetime :lastLogin

      t.timestamps
    end
  end
end

我想提出的网址请求如下:http://localhost:3000/testers?tester_id[]=1&tester_id[]=2&country[]=US

我的服务器正确地识别出我已经传递了一系列参数,但我的问题是它正在点击index路径,只是返回我数据库中的所有测试人员。

如何让Rails将此识别为“show”请求,或者为此类网址创建自定义路由?

2 个答案:

答案 0 :(得分:2)

根据您的意见,理想的做法是使用您的index操作本身..

def index
  @testers = Tester.data(params[:tester_ids])
end

testers.rb模型中

scope :data, ->(ids) { ids.present? ? where(id: params[:tester_ids].split(',')) : all }

,您的网址将如下所示

http://localhost:3000/testers为所有人和

已过滤的测试人员

http://localhost:3000/testers?tester_ids=1,2,3

答案 1 :(得分:0)

在视图中:

= link_to 'Testers', testers_path(ids: @selected_testers.pluck(:id))

在控制器中:

@testers = Tester.find(params[:ids])

与使用where相反,find确保每个给定ID都有一条记录。因此,如果ID 1337作为params[:ids]数组的一部分进入,并且数据库中没有ID为1337的测试程序,则会引发错误(类似于调用Tester.find(1337)时)。