1

我正在创建一个 API,我希望外部只能访问更新方法来实现报告。但如果没有报告,我想创建它。我知道最简单的方法就是在更新方法中创建它,但是一旦我已经有了一个创建方法构建,我想知道是否可以调用它来发送一些参数。

我在这里环顾四周Rails 3: Call functions inside controllers or API 但我没有找到任何好的解决方案。

有人有更好的吗?

非常感谢您提前。

4

1 回答 1

4

你不应该从另一个动作中调用你的控制器的动作。

为什么?因为控制器的每一个动作都被定义为响应一个请求,该请求具有几个属性(如 IP、参数、会话、HTTP 标头等)。想象一下,在 Controller 中调用另一个动作是多么“奇怪”。

如果您想做与更新操作无关的“额外逻辑”(例如,创建),您应该调用此控制器的受保护(只能通过控制器及其子级访问)方法。

在您的情况下,您可以执行以下操作:

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 回答