2014-11-01 66 views
0

繼以下兩個網友的wikirailscast我試着重寫和重定向我的網址,如果我的用戶模型的名稱已更改。遺憾的是,沒有發生。我跑了適當的遷移:FriendlyID歷史記錄不適用於Rails中的更新模型網址

rails generate friendly_id 
rails generate migration add_slug_to_artists slug:string:uniq 
rake db:migrate 

並應用此代碼按照指示,但無濟於事。在最初創建模型實例後,url保持不變。

藝術家型號

extend FriendlyId 
friendly_id :name, use: [:slugged, :history] 

用戶控制器

class ArtistssController < ApplicationController 
    before_action :set_artist, only: [:show, :edit, :update, :destroy] 

    def show 
    if request.path != user_path(@artist) 
     redirect_to @artist, :status => :moved_permanently 
    end 
    end 

    def update 
    if @artist.update_attributes(artist_params) 
     flash[:notice] = 'Artist successfully updated' 
     redirect_to @artist 
    else 
     render 'edit' 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_artist 
     @artist = Artist.friendly.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def artist_params 
     params.require(:artist).permit(:name) 
    end 
end 
+0

所以我不知道這是否是問題你沒有張貼代碼爲'update'方法,但是你需要設置'爲了重新生成「slug」到「nil」。 – 2014-11-01 04:17:31

+0

@ViniciusPinto我已更新我的問題以顯示更新操作中的內容(從腳手架生成的默認代碼)。你會推薦我做什麼? – 2014-11-01 04:39:52

+0

在調用'update_attributes()' – 2014-11-01 04:51:23

回答

1

雖然它在其docs在控制器改變網址,FriendlyID 5是從來沒有真正解釋的代碼說明。我最後不得不加@artist.slug = nil此生效:

def update 
    @artist.slug = nil 
    if @artist.update_attributes(artist_params) 
    flash[:notice] = 'Artist successfully updated' 
    redirect_to @artist 
    else 
    render 'edit' 
    end 
end 
+0

'@artist.slug = nil'應該在調用'update_attributes'之前 – 2014-11-01 04:58:05

+0

這看起來是不是正確? – 2014-11-01 04:59:43

+0

看起來不錯,但你不能運行代碼? – 2014-11-01 05:02:28

相關問題