使用rails时未定义的局部变量或方法错误

时间:2012-02-12 23:21:27

标签: ruby-on-rails methods controller

我在控制器中有一个方法 -

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

1 个答案:

答案 0 :(得分:0)

正如Dave Newton在评论(+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!

无效