我对如何构建路线感到困惑。我的应用程序处理时间表并包含三个模型:
Employer
Employer id
Name and password
Employee
id
Employer id (FK)
Name and password
Timesheet
Employee id (FK)
Employer id(FK)
Timestamp
我想根据员工ID选择员工的时间表,并能够使用雇主ID为所有雇员选择工作时间表。在这两种情况下,我还希望能够将我选择的时间表限制为特定的一周。
这是我到目前为止所做的:
scope '/api' do
scope '/v1' do
scope '/employees' do
get '/' => 'api_employees#index'
post '/' => 'api_employees#create'
scope '/:id' do
get '/' => 'api_employees#show'
put '/' => 'api_employees#update'
scope '/timesheets' do
get '/' => 'api_timesheets#index'
post '/' => 'api_timesheets#create'
scope '/:date' do
get '/' => 'api_timesheets#show'
put '/' => 'api_timesheets#update'
end
end
end
end
end
end
我很困惑我是否应该创建一个名为“雇主”的全新范围,其中包含员工和时间表,或者我是否应将现有范围放在雇主范围内以避免重复。
答案 0 :(得分:1)
当我设计路线时,我想到了一个文件系统。例如,在您的情况下,时间表是文件,其ID是文件名。时间表保存在文件夹timesheets
中。如果您是linux / unix用户,请将根路径视为/usr/share
,其中资源只能由任何人阅读。
当我想搜索某些时间表时,我将搜索条件添加到查询字符串中,就像在文件系统中按CTRL + F
一样。
当我想限制对某些时间表的访问时,我将它们放在用户home directory
中,其名称为/employers/:employer_id
或/employees/:employee_id
(:xxx_id如果您可以通过登录识别它们,则可以省略部分。
所以路线看起来像
scope 'api' do
scope 'v1' do
resources :timesheets, only: [:index, :show]
resources :employees, only: [:show, :update] do
resources :timesheets, only: [:index, :create]
end
resources :employers, only: [:show, :update] do
resources :timesheets, only: [:index]
end
end
end
"按日期搜索"可以在任何index
行动中实施。