Ruby on rails 调用内部控制器操作并在它们之间发送参数

Ruby on rails 调用内部控制器操作并在它们之间发送参数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在创建一个API,我希望外部只能访问更新方法来实现报告。但如果没有报告,我想创建它。我知道最简单的方法就是在update方法中创建它,但是当我已经有了一个create方法构建之后,我想知道是否可以调用它并向它发送一些参数 我环顾了一下这里或API,但没有找到任何好的解决方案 有人有更好的吗 非常感谢您。您不应该从另一个操作调用控制器的操作 为什么??因为控制器的每个动作都被定义为响应一个请求,该请求具有多个属性,如IP、参数、会话、HTTP头等。。想象一下,从控制器中的另一个调用操作会有多奇

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

我环顾了一下这里或API,但没有找到任何好的解决方案

有人有更好的吗


非常感谢您。

您不应该从另一个操作调用控制器的操作

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

如果要执行与更新操作无关的额外逻辑(例如,create),则应仅通过该控制器的Controller及其子方法调用受保护的accessible

在您的情况下,您可以这样做:

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

您不应该从另一个操作调用控制器的操作

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

如果要执行与更新操作无关的额外逻辑(例如,create),则应仅通过该控制器的Controller及其子方法调用受保护的accessible

在您的情况下,您可以这样做:

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

否,您应该将此创建过程委托给更新操作。控制器中的一个动作就是响应一个请求,我认为你不能从任何地方这样调用它。但是您的控制器中可以有一个受保护的方法,如果报表不存在,该方法将创建报表。确定。所以我应该这样做:private/def create_reportparams…..end/然后从action def myaction。。。报告=创建报告MyParams。。。你是智慧之井。谢谢!否,您应该将此创建过程委托给更新操作。控制器中的一个动作就是响应一个请求,我认为你不能从任何地方这样调用它。但是您的控制器中可以有一个受保护的方法,如果报表不存在,该方法将创建报表。确定。所以我应该这样做:private/def create_reportparams…..end/然后从action def myaction。。。报告=创建报告MyParams。。。你是智慧之井。谢谢!谢谢师父!非常感谢您的时间和努力,谢谢师父!我真的很感谢你的时间和努力。