というネストされたリソースを持つ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
、私はエラーを取得することを「必要なキーが欠落:[:EMAIL_ID]」と私はparamsハッシュを見たとき: '{ "param" =>:email_template_id、 "controller" => "templates/emails/moves"、 "action" => "new"、 "email_id" => "1"} ' –