2011-08-17 9 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 

railway rを行う

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

は私が望んで何を提供しますサーバーを追加してユーザー(4e4b61e39f0d60d834000002)を追加し、次にhttp://localhost:3000/users/4e4b61e39f0d60d834000002/setups/newに行きます。「POSTできません」と表示されます。

私には何が欠けていますか?良いデバッグ方法は何ですか?

また、UserSchemaオブジェクトに要素を追加しようとしました:setups: [SetupSchema]。 (これを行う必要はありませんか?)

ありがとうございます。ファイルapp/views/setups/new.ejs

+0

railways.jsノード上で?(Expressを使用する) – Raynos

答えて

1

ルック:それはルート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を修正するためにそれを変更する必要があります。

<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は正しいルートを作成します。あなたのsetup_controllerで

+0

それは理にかなっています。エッセリーの変更?私は最初の変更を行い、同じエラーが発生します。 this.user = getUser(req.params ['user_id']) –

+0

セットアップコントローラで、 'new'アクション(または' new'アクションの前にフィルタを作成) param to user_setupsヘルパー:path_to.users_setups(request.params ['user_id']); – Anatoliy

+0

または、siply、あなたはuser_idを次のように渡すことができます: – Anatoliy

3

:セットアップ/ 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)); 
} 

:あなたはレールをエミュレートしない試してみました:(

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

セットアップのコントローラとすべてのビューでpath_to.setupsをpath_to.user_setupsに変更する必要がありますか? new.ejsのようなビューにユーザーオブジェクトに関する情報をどのように送信して使用するのですか?ありがとう! –

+0

設定リソースがユーザの下でネストされている場合、それはあなたの例ではyesですが、path_to.user_setups(user)を指定する必要があります。フィルタがロードされる前のloadUser()は、ユーザをthis.userにフェッチして割り当てます。いったん起こったビューテンプレートは、単に "user"にアクセスできます。 –

関連する問題