Ich habe ein email_template
Modell, das eine verschachtelte Ressource moves
hat, um das Verschieben eines email_template
von einem Ordner zu einem anderen zu behandeln.Rails-Routing mit Namespaces und verschachtelten Routen
Allerdings möchte ich diese Aktionen in einem :templates
Namespace Namespace, da ich mehrere andere Ressourcen, die Vorlage Elemente sowie.
Da ich Namespacing bin, möchte ich nicht templates/email_templates/:id
in der URL sehen, würde ich lieber templates/emails/:id
sehen.
Um zu erreichen, dass ich folgendes haben:
# routes.rb
namespace :templates do
resources :emails do
scope module: :emails do
resources :moves, only: [:new, :create]
end
end
end
Alles funktioniert gut, wenn ich CRUD Aktionen auf die E-Mails zu tun, da sie die :id
Parameter nur verwenden. Allerdings, wenn ich die verschachtelte moves
verwenden, hält die Eltern-ID für die E-Mails kommen über als :email_id
und nicht :email_template_id
. Ich bin sicher, dass dies das erwartete Verhalten von Rails ist, aber ich versuche, herauszufinden, wie die Eltern-ID bestimmt wird. Kommt es aus dem Singular des Ressourcennamen in den Strecken, oder wobei es sich aus dem Modell irgendwie gebaut?
Ich denke, es ist in Ordnung templates/emails/:email_id/moves/new
zu verwenden, aber in einer perfekten Welt würde ich templates/emails/:email_template_id/moves/new
lieber nur so Entwickler klar, dass es eine email_template
Ressource, kein email
.
# 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
Wenn ich das tue, ich die Fehlermeldung "erforderlichen Schlüssel fehlt: [: email_id]" und wenn ich mir die params hash: '{ "param" =>: email_template_id, "Controller" => "templates/E-Mails/moves", "action" => "neu", "email_id" => "1"} ' –