任何嵌套路由都应该有直接资源路由吗?

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.