在我的网络应用中,我创建了两个模块;客户和工人。我的问题是我无法创建一个从工人#index到客户#show的“后退”链接。换句话说,我想在URL中创建它:
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
我认为这与未输入正确的URL帮助程序有关。当我运行rake路由时,我看到了我想要的路径,这让我相信我已经正确地嵌套了资源。但是我保持似乎无法输入正确的参数返回客户端#show页面而不是客户端#index。
<%= link_to 'Back', client_path(@client) %>
在app / views / workers / show.html.erb中,我的链接为: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
。
工人控制器
var i = 0, length = $scope.ionicon_class_list1.length;
$scope.iterator = function(){
console.log($scope.ionicon_class_list1[i]);
$scope.current_symbol_for_list1=$scope.ionicon_class_list1[i]
if(++i<length) {
$timeout($scope.iterator, 3000)
}
}
})
答案 0 :(得分:1)
您想要的网址在:id
之后需要/clients/
。您的路线显示/clients/:id
的路径为client_path
,而不是clients_path
。 (client GET /clients/:id(.:format)clients#show )
。
所以,如果你在那个worker #index页面中有那个id,你可以把它写成
<%= link_to 'Back', client_path(@client) %>
。交叉检查语法并尝试。
答案 1 :(得分:1)
Thanks to everyone in the comments we were able to find the answer. I decided to group the answers together so it would be easier for others who have this issue to find this post.
The correct link is: <%= link_to 'Back', client_path(@client) %>
For this to work I had to change the WorkersController #show and #index Method to the following:
class WorkersController < ApplicationController
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
Essentially, changing the local variable client
into an instance variable @client
so it's accessible.