1

私は API を作成していますが、レポートを実現するために、外部から update メソッドにのみアクセスできるようにしたいと考えています。しかし、レポートがない場合は、作成したいと思います。それを行う簡単な方法は更新メソッド内で作成することであることは知っていますが、作成メソッドのビルドがすでにあるとすぐに、いくつかのパラメーターも送信して呼び出すことができるかどうか疑問に思っていました。

Rails 3: Call functions inside controllers or the API のように見回しましたが、良い解決策が見つかりませんでした。

誰かがより良いものを持っていますか?

事前にどうもありがとうございました。

4

1 に答える 1

4

コントローラーのアクションを別のアクションから呼び出さないでください。

なんで?コントローラーのすべてのアクションは、いくつかの属性 (IP、パラメーター、セッション、HTTP ヘッダーなど) を持つ要求に応答するように定義されているためです。コントローラーで別のアクションを呼び出すことがいかに「奇妙」か想像してみてください。

更新アクション (作成など) に関連しない「追加のロジック」を実行する場合は、このコントローラーの保護された (コントローラーとその子を介してのみアクセス可能) メソッドを呼び出す必要があります。

あなたの場合、次のようなことができます:

class ReportsController < ApplicationController
  def update
    @report = Report.where(id: params[:report_id]).first
    if @report.nil?
      create_report(params)
    else
      # etc.
    end
  end

  protected

  def create_report(params)
    Report.create(params)
  end
end
于 2013-08-15T18:37:53.653 に答える