railway.js中的嵌套资源:说不能POST

时间:2011-08-17 07:23:16

标签: node.js express railway.js

我正在尝试一个名为railway.js的MVC框架(位于Node,Express,Mongoose和Mongo之上)。

我正在尝试使用嵌套资源。我做了以下脚手架命令:

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

然后我将routes.js文件更改为:

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

railway r给出了我的期望:

     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

当我启动服务器时,添加一个用户(恰好是4e4b61e39f0d60d834000002),然后转到http://localhost:3000/users/4e4b61e39f0d60d834000002/setups/new,它说我“无法发布”。

我错过了什么?什么是一个好的调试方法?

我还尝试在UserSchema对象中添加一个元素:setups: [SetupSchema]。 (我们不应该这样做吗?)

提前致谢。

2 个答案:

答案 0 :(得分:3)

你的setup_controller中的

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 / form.jade中的

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

答案 1 :(得分:1)

查看档案app/views/setups/new.ejs

<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.setups,你必须将它改为正确的路径path_to.user_setups:

<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) %>
<% });%>

因此,您将POST到/users/.../setups而不是POST到/ users /.../ setups / new。

请注意,您需要传递用户作为path_to帮助者的第一个参数,因此铁路将为您构建正确的路线。