2014-12-27 57 views
2

我爲名爲Userfolder的模型創建了嵌套路由。該路由映射是這樣的:重定向以創建錯誤路由動作的嵌套路由

Rake Routes

userfolder_userfolders POST /userfolders/:userfolder_id/userfolders(.:format)  userfolders#create 
new_userfolder_userfolder GET /userfolders/:userfolder_id/userfolders/new(.:format) userfolders#new 

這正是我想要的方式。但是,當我創建新的用戶文件夾時,Rails將創建操作重定向到「/ userfolders」,而不是「/ userfolders /:userfolder_id/userfolders」。它仍然遵循最初的Rails腳手架路線。

有沒有辦法改變它?或者我完全錯過了一些東西?

編輯1:這是我的用戶文件夾控制器代碼。

class UserfoldersController < ApplicationController 


before_action :set_userfolder, only: [:show, :edit, :update, :destroy] 
    before_action :set_parentfolder, except: [:show, :edit, :update, :destroy, :index] 

    # GET /userfolders 
    # GET /userfolders.json 
    def index 
    if Userfolder.first.nil? 
     Userfolder.create(:name => 'root', :parent_id => 0) 
    end 
    redirect_to Userfolder.first 
    end 

    # GET /userfolders/1 
    # GET /userfolders/1.json 
    def show 
    end 

    # GET /userfolders/:userfolder_id/userfolders/new(.:format) 
    def new 
    @userfolder = @parentfolder.children.build 
    end 

    # GET /userfolders/1/edit 
    def edit 
    end 

    # POST /userfolders/:userfolder_id/userfolders 
    def create 
    @userfolder = @parentfolder.children.build(userfolder_params) 

    respond_to do |format| 
     if @userfolder.save 
     format.html { redirect_to userfolder_path(@parentfolder.id), notice: 'Userfolder was successfully created.' } 
     else 
     render :action => 'new' 
     end 
    end 
    end 

    # PATCH/PUT /userfolders/1 
    # PATCH/PUT /userfolders/1.json 
    def update 
    respond_to do |format| 
     if @userfolder.update(userfolder_params) 
     format.html { redirect_to @userfolder, notice: 'Userfolder was successfully updated.' } 
     else 
     render :action => 'edit' 
     end 
    end 
    end 

    # DELETE /userfolders/1 
    # DELETE /userfolders/1.json 
    def destroy 
    parent_folder = @userfolder.parent 
    @userfolder.destroy 
    respond_to do |format| 
     format.html { redirect_to parent_folder, notice: 'Userfolder was successfully destroyed.' } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_userfolder 
     @userfolder = Userfolder.find(params[:id]) 
    end 

    def set_parentfolder 
     @parentfolder = Userfolder.find(params[:userfolder_id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def userfolder_params 
     params.require(:userfolder).permit(:name, :parent_id) 
    end 
end 

這是我的routes.rb文件:

Rails.application.routes.draw do 
    resources :userfiles 

    # The priority is based upon order of creation: first created -> highest priority. 
    # See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    root 'userfolders#index' 

    resources :userfolders, :shallow => true, :except => [:new, :create] do 
    resources :userfolders, :only => [:new, :create] 
    end 

編輯2: 這是控制檯輸出: Console

+0

告訴我們您的創建操作,在您的意見或完整控制器代碼中的行爲不正確 – 2014-12-27 17:51:28

+0

請在此處添加您的代碼。它是一個自我連接關聯嗎?此外:如果創建關聯的記錄,userfolder_id將被轉換爲值,並且不會在url中顯示。 – jaspreet21anand 2014-12-27 18:05:03

+0

@ RustamA.Gasanov我已經添加了上面的控制器和routes.rb代碼。 – 2014-12-27 18:37:51

回答

1

所以這個問題是與_form.html.erb像我懷疑。

這是創建控制器:

def create 
@userfolder = @parentfolder.children.build(userfolder_params) 

respond_to do |format| 
    if @userfolder.save 
    format.html { redirect_to @parentfolder, notice: 'Userfolder was successfully created.' } 
    else 
    render :action => 'new' 
    end 
end 
end 

這裏是_form.html.erb:

<%= form_for([@parentfolder, @userfolder]) do |f| %> 
    <% if @userfolder.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@userfolder.errors.count, "error") %> prohibited this userfolder from being saved:</h2> 

     <ul> 
     <% @userfolder.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :parent_id %><br> 
    <%= f.number_field :parent_id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

通過添加<%= form_for([@parentfolder, @userfolder]) do |f| %>,我告訴Rails的重定向到/ userfolders/:userfolder_id/userfolders。而不是重定向到/用戶文件夾。