2017-10-04 9 views
0

というネストされたリソースを持つemail_templateモデルは、email_templateを1つのフォルダから別のフォルダに移動するのを処理します。名前空間とネストされたルートを使用したRailsルーティング

ただし、私は:templatesネームスペースでこれらのネームスペースをネームスペースにしたいのですが、テンプレートアイテムでもある他のリソースがいくつかあるためです。

名前空間になっているので、URLにtemplates/email_templates/:idが表示されたくないので、templates/emails/:idが好きです。私が持っていることを達成するために

次:私は電子メールでCRUD操作を行うとき、彼らはただ:idパラメータを使用しているので、

# routes.rb 
namespace :templates do 
    resources :emails do 
    scope module: :emails do 
     resources :moves, only: [:new, :create] 
    end 
    end 
end 

すべてが、正常に動作します。ただし、ネストされたmovesを使用すると、メールの親IDは:email_idであり、:email_template_idではなくなります。これがRailsの予想される動作だと確信していますが、親IDの決定方法を理解しようとしています。それはルート内のリソース名の単数から来たのでしょうか、それとも何とかモデルから構築されていますか?

は、私はそれがtemplates/emails/:email_id/moves/newを使用しても大丈夫ですが、完璧な世界で、私は、開発者はそれがemail_template資源、ないemailだことが明らかにされているだけのようtemplates/emails/:email_template_id/moves/newを好むだろうと思います。あなたのようにパラメータをカスタマイズすることができ

# app/controllers/templates/emails_controller.rb 
module Templates 
    class EmailsController < ApplicationController 
    def show 
     @email_template = EmailTemplate.find(params[:id]) 
    end 
    end 
end 

# app/controllers/templates/emails/moves_controller.rb 
module Templates 
    module Emails 
    class MovesController < ApplicationController 
     def new 
     # Would prefer to reference via :email_template_id parameter 
     @email_template = EmailTemplate.find(params[:email_id]) 
     end 

     def create 
     @email_template = EmailTemplate.find(params[:email_id]) 

     # Not using strong_params here to demo code 
     if @email_template.update_attribute(:email_tempate_folder_id, params[:email_template][:email_template_folder_id]) 
      redirect_to some_path 
     else 
      # errors... 
     end 
     end 
    end 
    end 
end 

答えて

0

:私が行うと

resources :emails, param: :email_template_id do 
     ... 
end 
+0

、私はエラーを取得することを「必要なキーが欠落:[:EMAIL_ID]」と私はparamsハッシュを見たとき: '{ "param" =>:email_template_id、 "controller" => "templates/emails/moves"、 "action" => "new"、 "email_id" => "1"} ' –

関連する問題