11

我有两种这样的方法

def process
  @type = params[:type]
  process_cc(@type)
end

private

def process_cc(type)
  @doc = Document.new(:type => type)
  if @doc.save
    redirect_to doc_path(@doc)
  else
    redirect_to root_path, :notice => "Error"
  end
end

我想要,当我从进程调用 process_cc 时,它会创建文档并随后重定向到 doc_path。也许我期待行为,这是 rails 无法处理的,但是 process 方法不会调用 process_cc 方法,而是尝试渲染模板......

对此有何建议?

谢谢!

4

4 回答 4

26

Object#send使您可以访问对象的所有方法(甚至是受保护的和私有的)。

obj.send(:method_name [, args...])
于 2015-08-14T02:43:32.930 回答
3

Action Controller 有一个内部方法,称为process您的方法正在屏蔽。为您的操作选择一个不同的名称。

于 2012-09-01T20:59:24.210 回答
1

改变这个:

def process_cc(type)
  @doc = Document.new(:type => type)
  if @doc.save
    redirect_to doc_path(@doc)
  else
    redirect_to root_path, :notice => "Error"
  end
end

至:

def process_cc(type)
  @doc = Document.new(:type => type)
  if @doc.save
    redirect_to doc_path(@doc) and return
  else
    redirect_to root_path, :notice => "Error" and return
  end
end
于 2016-10-11T15:19:41.150 回答
0

您可以像这样调用任何(不仅仅是私有)方法

class SomeClass

  private
  def some_method(arg1)
    puts "hello from private, #{arg1}"
  end
end

c=SomeClass.new

c.method("some_method").call("James Bond")

或者

c.instance_eval {some_method("James Bond")}

顺便说一句,在您的代码中,尝试使用

self.process_cc(...)
于 2012-09-01T15:52:01.453 回答