Вложенные ресурсы в Railway.js: говорит, что не может POST - PullRequest
1 голос
/ 17 августа 2011

Я пробую MVC-фреймворк с именем railway.js (который находится поверх Node, Express, Mongoose и Mongo).

Я пытаюсь заставить работать вложенные ресурсы. Я выполнил следующие команды:

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

Затем я изменил файл rout.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,, где написано, что «я не могу POST».

Что мне не хватает? Какой хороший подход к отладке?

Я также попытался добавить элемент в объект UserSchema: setups: [SetupSchema]. (Разве мы не должны это делать?)

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

в вашем 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));
}

в вашей настройке / form.jade:

- form_for( setup, { method: 'POST', action: path_to.user_setups(user) }, function(form){
    //layout your form
- });
1 голос
/ 17 августа 2011

Посмотрите на файл 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 helper вам необходимо указать пользователя user, поэтому Railway построит для вас правильный маршрут.

...