Dans mon application Web, j'ai créé deux modules; Clients et travailleurs. Mon problème est que je ne peux pas créer un lien 'Retour' depuis l'index des travailleurs vers les # clients. En d'autres termes, je veux créer cela dans l'URL:Rails 4 Routage imbriqué Retour à l'affichage des parents Page
http://localhost:3000/clients/1
Je crois qu'il doit faire avec ne pas entrer dans l'aide à droite URL. Quand je cours des routes de rake je vois le chemin que je veux, ceci me conduit à croire que j'ai imbriqué les ressources correctement. Cependant, je ne peux pas sembler entrer le bon paramètre pour revenir à la page client # show au lieu des clients # index.
Prefix Verb URI Pattern Controller#Action
client_workers GET /clients/:client_id/workers(.:format) workers#index
POST /clients/:client_id/workers(.:format) workers#create
new_client_worker GET /clients/:client_id/workers/new(.:format) workers#new
edit_client_worker GET /clients/:client_id/workers/:id/edit(.:format) workers#edit
client_worker GET /clients/:client_id/workers/:id(.:format) workers#show
PATCH /clients/:client_id/workers/:id(.:format) workers#update
PUT /clients/:client_id/workers/:id(.:format) workers#update
DELETE /clients/:client_id/workers/:id(.:format) workers#destroy
clients GET /clients(.:format) clients#index
POST /clients(.:format) clients#create
new_client GET /clients/new(.:format) clients#new
edit_client GET /clients/:id/edit(.:format) clients#edit
client GET /clients/:id(.:format) clients#show
PATCH /clients/:id(.:format) clients#update
PUT /clients/:id(.:format) clients#update
DELETE /clients/:id(.:format) clients#destroy
root GET / clients#index
Dans app/views/travailleurs/show.html.erb J'ai le lien: <%= link_to 'Back', client_path(@client) %>
.
contrôleur de travailleurs
class WorkersController < ApplicationController
before_action :set_worker, only: [:show, :edit, :update, :destroy]
# GET /clients/:client_id/workers
# GET /clients/:post_id/workers.xml
def index
#1st you retrieve the client thanks to params[:client_id]
client = Client.find(params[:client_id])
#2nd you get all the workers of this client
@workers = client.workers
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @comments }
end
end
# GET /clients/:client_id/workers/:id
# GET /workers/:id.xml
def show
#1st you retrieve the client thanks to params[:client_id]
@client = Client.find(params[:client_id])
#2nd you retrieve the comment thanks to params[:id]
@worker = client.workers.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @comment }
end
end
# GET /clients/:client_id/workers/new
# GET /clients/:client_id/workers/new.xml
def new
#1st you retrieve the post thanks to params[:post_id]
client = Client.find(params[:client_id])
#2nd you build a new one
@worker = client.workers.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @comment }
end
end
# GET /posts/:post_id/comments/:id/edit
# GET /clients/:client_id/workers/:id/edit
def edit
#1st you retrieve the post thanks to params[:post_id])
client = Client.find(params[:client_id])
#2nd you retrieve the comment thanks to params[:id]
@worker = client.workers.find(params[:id])
end
# POST /client/:client_id/workers
# POST /client/:client_id/worker.xml
def create
#1st you retrieve the post thanks to params[:post_id]
client = Client.find(params[:client_id])
#2nd you create the comment with arguments in params[:comment]
@worker = client.workers.create(worker_params)
respond_to do |format|
if @worker.save
#1st argument of redirect_to is an array, in order to build the correct route to the nested resource comment
format.html { redirect_to([@worker.client, @worker], :notice => 'Worker was successfully created.') }
#the key :location is associated to an array in order to build the correct route to the nested resource comment
format.xml { render :xml => @worker, :status => :created, :location => [@worker.client, @worker] }
else
format.html { render :action => "new" }
format.xml { render :xml => @worker.errors, :status => :unprocessable_entity }
end
end
end
# PUT /client/:client_id/Workers/:id
# PUT /client/:client_id/workers/:id.xml
def update
#1st you retrieve the post thanks to params[:post_id]
client = Client.find(params[:client_id])
#2nd you retrieve the comment thanks to params[:id]
@worker = client.workers.find(params[:id])
respond_to do |format|
if @worker.update_attributes(worker_params)
#1st argument of redirect_to is an array, in order to build the correct route to the nested resource comment
format.html { redirect_to([@worker.client, @worker], :notice => 'Worker was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @worker.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /client/:client_id/workers/1
# DELETE /client/:client_id/worker/1.xml
def destroy
#1st you retrieve the post thanks to params[:post_id]
client = Client.find(params[:client_id])
#2nd you retrieve the comment thanks to params[:id]
@worker = client.workers.find(params[:id])
@worker.destroy
respond_to do |format|
#1st argument reference the path /posts/:post_id/comments/
format.html { redirect_to(client_workers_url) }
format.xml { head :ok }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_worker
@worker = Worker.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def worker_params
params.require(:worker).permit(:first_name, :last_name, :birth_day, :birth_month, :birth_year, :birth_city, :birth_state, :client_id)
end
end
Pouvez-vous publier votre 'workers_controller'? – Pavan
Si vous souhaitez renvoyer '/ clients/1/workers' vers'/clients/1', vous utilisez un mauvais chemin. Vous devriez utiliser 'client_path (some_client)'. – meagar
Meaga, comment est-ce que j'indique 'some_client'? Avec une variable d'instance ou un attribut id? – hp001