我有两种这样的方法
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方法并尝试渲染模板而是......
对此有何建议?
谢谢!
答案 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(...)