2012-02-12 125 views
0

我在控制器的方法 -未定義的局部變量或方法錯誤

def undo_link 
    view_context.link_to("undo", revert_version_path(@page.versions.scoped.last), :method => :post) 
end 

但是當我"#{undo_link}"調用它的觀點。我得到了未定義的局部變量或方法錯誤 。

我到底做錯了什麼?

更新:在這裏,在控制器的還原方法

不錯,但那麼這是該還原方法我在控制器

def revert 
    @version = Version.find(params[:id]) 
    if @version.reify 
    @version.reify.save! 
    else 
    @version.item.destroy 
    end 
    link_name = params[:redo] == "true" ? "undo" : "redo" 
    link = view_context.link_to(link_name, revert_version_path(@version.next, :redo => !params[:redo]), :method => :post) 
    redirect_to :back, :notice => "Undid #{@version.event}. #{link}" 
end 
+2

是什麼讓你認爲你可以從視圖中調用任意控制器方法?也許你正在考慮創建一個幫手? – 2012-02-12 23:24:27

+0

好吧,我試過了,但它弄亂了路線。 view_context給出了一個沒有方法的錯誤 – 2012-02-12 23:26:42

+2

你不需要view_context n助手 – apneadiving 2012-02-12 23:27:50

回答

0

了戴夫牛頓在評論(+1)說,這屬於幫手。

helpers/pages_helper.rb

module PagesHelper 
    def undo_link 
    # ...define view_context here... 
    view_context.link_to("undo", revert_version_path(@page.versions.scoped.last), :method => :post) 
    end 
end 

請注意,您需要定義view_context在此之前將工作,無論是在空間表示,在將它作爲一個參數,或者使用變量訪問到視圖實例在調用輔助方法的時候。

要調用它在一個視圖:

<%= undo_link %> 

如果你這樣做......

"#{undo_link}" 

...你會得到這樣的:

"<a href="/revert/version/path/...">undo</a>" # <= surrounded by quotes! 

這將不工作

+0

,這又是一個愚蠢的問題。但如何定義view_context? – 2012-02-12 23:50:54

+0

我不知道'view_context'是什麼。你也可以在你的控制器中使用它。這是你的設計,所以你告訴我......'view_context'從哪裏來,它應該代表什麼? – Substantial 2012-02-13 00:00:43

+0

好了,view_context基本上用在link_to這樣的標籤不工作的控制器中。簡而言之就是將視圖標籤帶給控制器。瑞安貝茨在這裏使用它http://railscasts.com/episodes/255-undo-with-paper-trail – 2012-02-13 00:02:13

相關問題