2011-08-17 2 views
1

railway.js (Node, Express, Mongoose 및 Mongo 위에 위치)라는 MVC 프레임 워크를 시험 중입니다.railway.js의 중첩 된 리소스 : POST 할 수 없습니다.

중첩 된 리소스를 사용하려고합니다.

railway g scaffold user name email description 
railway g scaffold setup title description 

가 그럼 난에 routes.js 파일 변경 : 내가 시작하면

 user_setups GET /users/:user_id/setups.:format?   setups#index 
    user_setups POST /users/:user_id/setups.:format?   setups#create 
    new_user_setup GET /users/:user_id/setups/new.:format?  setups#new 
edit_user_setup GET /users/:user_id/setups/:id/edit.:format? setups#edit 
     user_setup DELETE /users/:user_id/setups/:id.:format?  setups#destroy 
     user_setup PUT /users/:user_id/setups/:id.:format?  setups#update 
     user_setup GET /users/:user_id/setups/:id.:format?  setups#show 
      users GET /users.:format?       users#index 
      users POST /users.:format?       users#create 
     new_user GET /users/new.:format?      users#new 
     edit_user GET /users/:id/edit.:format?     users#edit 
      user DELETE /users/:id.:format?      users#destroy 
      user PUT /users/:id.:format?      users#update 
      user GET /users/:id.:format?      users#show 

:

exports.routes = function (map) { 
    map.resources('users',function(user) { 
    user.resources('setups'); 
    }); 
}); 

railway r을하는을 나는 희망 무엇을 부여합니다 나는 다음과 같은 비계 명령을했다 서버, 사용자 추가 (4e4b61e39f0d60d834000002), http://localhost:3000/users/4e4b61e39f0d60d834000002/setups/new으로 이동하면 "POST 할 수 없습니다"라고 표시됩니다.

무엇이 누락 되었습니까? 좋은 디버깅 접근법은 무엇입니까?

또한 UserSchema 개체에 요소를 추가하려고 시도했습니다 : setups: [SetupSchema]. (우리가해야할까요?)

미리 감사드립니다.

그것은 경로 path_to.setups 기존하지 의미
<h1>New setup</h1> 

<% form_for(setup, {action: path_to.setups, method: 'POST', id: "setup_form"}, function (form) { %> 
    <%- partial('setups/form.ejs', {locals: {form: form, setup: setup}}) %> 
    <%- form.submit('Create setup') %> or 
    <%- link_to('Cancel', path_to.setups) %> 
<% });%> 

, 당신은 경로 path_to.user_setups 수정을 변경해야합니다 : 파일 app/views/setups/new.ejs에서

+0

railways.js 노드에서? (익스프레스 사용) – Raynos

답변

1

봐 그래서

<h1>New setup</h1> 

<% form_for(setup, {action: path_to.user_setups(user), method: 'POST', id: "setup_form"}, function (form) { %> 
    <%- partial('setups/form.ejs', {locals: {form: form, setup: setup}}) %> 
    <%- form.submit('Create setup') %> or 
    <%- link_to('Cancel', path_to.setups) %> 
<% });%> 

을, 당신은 게시 할 예정입니다 /users/.../setups/new에 POST 대신 /users/.../setups를 지정하십시오.

path_to 도우미의 첫 번째 인수로 user를 전달해야하므로 railway가 올바른 경로를 작성합니다. 셋업/form.jade에서

before(loaduser); 

...

function loadUser() { 
User.findById(req.params.user_id, function (err, user) { 
    if (err || !user) { 
      redirect(path_to.users); 
     } else { 
      // this is where we make the actual user object accessible inside the view templating 
      this.user = user; 
      next(); 
     } 
    }.bind(this)); 
} 

: 당신의 setup_controller에

+0

의미가 있습니다. 마지막에 메모에 관해서는 내가 필요한 부분을 명확히 할 수 있습니까? essary 변경? 나는 첫 번째 변경을했고 나는 같은 오류를 낳는다. –

+0

설정 컨트롤러에서'new' 액션 (또는'new' 액션 전에 필터를 만듭니다) : this.user = getUser (req.params [ 'user_id']) – Anatoliy

+0

또는 siply로 user_id를 다음과 같이 전달할 수 있습니다. param to user_setups helper : path_to.users_setups (request.params [ 'user_id']); – Anatoliy

3

을 모방하지 시도 레일이 :(

- form_for(setup, { method: 'POST', action: path_to.user_setups(user) }, function(form){ 
    //layout your form 
- }); 
+0

path_to.setups를 setup의 컨트롤러 및 모든보기에서 path_to.user_setups로 변경해야합니까? new.ejs와 같은보기로 사용자 개체에 대한 정보를 보내고 사용하려면 어떻게해야합니까? 감사! –

+0

설치 리소스가 사용자 아래에 중첩되어있는 경우 예에서와 같이 yes로 설정하면 path_to.user_setups (사용자)를 지정해야합니다. 필터가로드되기 전에 loadUser()가 가져 와서 this.user에 사용자를 지정합니다. 일단 발생하면 "user"에 액세스 할 수있는 뷰 템플릿이 생성됩니다. –

관련 문제