2012-02-12 34 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

相关问题