所以我想通过一系列参数传递给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”请求,或者为此类网址创建自定义路由?
答案 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)
时)。