在rails中调用私有方法?

时间:2012-09-01 15:44:51

标签: ruby-on-rails

我有两种这样的方法

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时,它会创建Document并在之后重定向到doc_path。也许我期待导轨无法处理的行为,但是进程方法不会调用process_cc方法并尝试渲染模板而是......

对此有何建议?

谢谢!

4 个答案:

答案 0 :(得分:14)

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

obj.send(:method_name [, args...])

答案 1 :(得分:3)

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

答案 2 :(得分:0)

改变这个:

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

答案 3 :(得分:-1)

您可以调用此类

之类的任何(不仅仅是私有)方法
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")}

BTW,在您的代码中,尝试使用

self.process_cc(...)