任何嵌套路由都应该有直接资源路由吗?
Should there be a direct resource route for any nested route?
我有一个 class 用户和一个 class 任务。我的任务资源路由嵌套在用户资源和任务 belong_to 用户和用户 have_many 任务中。
resources :users, except: [:new, :edit] do
resources :tasks, except: [:new, :edit]
end
在我的 rspec "requests" 测试中,我正在尝试 POST 与关联用户的新任务,但它看起来像是在尝试直接 /tasks
路线最终它没有找到。如果我的路由文件如下所示,则测试通过:
resources :users, except: [:new, :edit] do
resources :tasks, except: [:new, :edit]
end
resources :tasks, except: [:new, :edit]
测试看起来像这样(有一个 before(:each)
创建了一个 @user1
):
describe "POST /users/1/tasks" do
it "creates a new task for user1" do
post user_tasks_path(@user1, task: {description: "post new task", due_date: "2/1/15", user_id: @user1.id})
expect(response).to have_http_status(201)
puts response.body
end
end
不,嵌套资源不是强制性的。
现在,关于您的规格。我不确定它是否试图达到 /tasks
,但请注意 post
方法的语法:
post(action, *args)
也就是说,您应该这样做:
post(user_tasks_path(@user1), task: {})
而不是:
post(user_tasks_path(@user1, task: {}))
HTH.
我有一个 class 用户和一个 class 任务。我的任务资源路由嵌套在用户资源和任务 belong_to 用户和用户 have_many 任务中。
resources :users, except: [:new, :edit] do
resources :tasks, except: [:new, :edit]
end
在我的 rspec "requests" 测试中,我正在尝试 POST 与关联用户的新任务,但它看起来像是在尝试直接 /tasks
路线最终它没有找到。如果我的路由文件如下所示,则测试通过:
resources :users, except: [:new, :edit] do
resources :tasks, except: [:new, :edit]
end
resources :tasks, except: [:new, :edit]
测试看起来像这样(有一个 before(:each)
创建了一个 @user1
):
describe "POST /users/1/tasks" do
it "creates a new task for user1" do
post user_tasks_path(@user1, task: {description: "post new task", due_date: "2/1/15", user_id: @user1.id})
expect(response).to have_http_status(201)
puts response.body
end
end
不,嵌套资源不是强制性的。
现在,关于您的规格。我不确定它是否试图达到 /tasks
,但请注意 post
方法的语法:
post(action, *args)
也就是说,您应该这样做:
post(user_tasks_path(@user1), task: {})
而不是:
post(user_tasks_path(@user1, task: {}))
HTH.