11

私はこのような2つの方法を持っています

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 にリダイレクトされます。多分私はレールが処理できない動作を期待していますが、プロセスメソッドは process_cc メソッドを呼び出さず、代わりにテンプレートをレンダリングしようとします...

これに関するアドバイスはありますか?

ありがとう!

4

4 に答える 4

26

Object#sendオブジェクトのすべてのメソッドにアクセスできます (保護されたものやプライベートなものも含む)。

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

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 に答える