如何从Ruby on Rails中的非控制器类获取参数

1rhkuytd  于 2023-10-18  发布在  Ruby
关注(0)|答案(1)|浏览(96)

我在一个非控制器类中有这个函数

def self.request(req_num, time)
    token = XsrfToken.last['token']
    db_parser = FetchDbParser.new
    used_url = ENUM_URLS[req_num]
    p token
    conn = Faraday.new(
      url: "#{BASE}#{used_url}",
      headers: { 'Content-Type' => 'application/json', 'XSRF-TOKEN' => token }
    )
    response = conn.post do |req|
      req.body = { stationCodes: params[:id], collectTime: time }.to_json
    end
    res = JSON.parse(response.body)
    return unless res['success']

    parser_caller(req_num, res, db_parser)
  end

我需要在这里得到一个参数req.body = { stationCodes: params[:id], collectTime: time }.to_json,但它是undefined
我还尝试在ApplicationController类中创建一个方法,该方法应该从非控制器类调用并返回此参数,但我得到了另一个错误

`params': undefined method `filtered_parameters' for nil:NilClass (NoMethodError)
x6yk4ghg

x6yk4ghg1#

params是一个控制器概念,并且仅在控制器动作的上下文中可用。
当你需要另一个对象中的params的值时,你需要显式地传递params或至少是你需要的值给这个对象。
例如,当您的控制器看起来像这样时

def method_name
  YourClass.request(req_num, time)
end

如果你需要self.request方法中的params[:id]的值,那么你需要像这样改变控制器方法

def method_name
  YourClass.request(req_num, time, params[:id])
end

你的self.request像这样

def self.request(req_num, time, id_from_params)  #<= see here
  token = XsrfToken.last['token']
  db_parser = FetchDbParser.new
  used_url = ENUM_URLS[req_num]
  p token
  conn = Faraday.new(
    url: "#{BASE}#{used_url}",
    headers: { 'Content-Type' => 'application/json', 'XSRF-TOKEN' => token }
  )
  response = conn.post do |req|
    req.body = { stationCodes: id_from_params, collectTime: time }.to_json  #<= and here
  end
  res = JSON.parse(response.body)
  return unless res['success']

  parser_caller(req_num, res, db_parser)
end

相关问题