Ruby on rails Rails:在内部转发post请求

Ruby on rails Rails:在内部转发post请求,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个应用程序,通过POST请求从气象站获取天气输入。 问题是固件有很多怪癖,我想把它们转移到单独的“适配器”控制器上,使参数正常化并转发请求 这些怪癖包括使用缩短的浮点、属性标识符和URL来节省内存/带宽 例如: POST/m->controller#create->(normalize)->ObservationController#create 为什么?如果“洁食”控制器能够处理不同固件的所有奇怪之处,那么它们将失控。 模型不应与输入规范化有关。这似乎是一个如何组织代码的问题 您不必局限

我有一个应用程序,通过POST请求从气象站获取天气输入。 问题是固件有很多怪癖,我想把它们转移到单独的“适配器”控制器上,使参数正常化并转发请求

这些怪癖包括使用缩短的浮点、属性标识符和URL来节省内存/带宽

例如:

POST/m->controller#create->(normalize)->ObservationController#create

为什么?如果“洁食”控制器能够处理不同固件的所有奇怪之处,那么它们将失控。
模型不应与输入规范化有关。

这似乎是一个如何组织代码的问题

您不必局限于基于ActiveRecord的模型,您可以创建自己的模型来处理数据规范化

class Normalizer
  def self.normalize_params(params)
    case params[:firmware_version]
    when 'ardiuno'
      # do stuff
    when 'something_else'
      # do something else
    end
    return params
  end
end
在控制器中,您可以这样调用它:

normalized_params = Normalizer.normalize_params(params)

这样你的逻辑就被隐藏起来了,一切都应该正常。不需要为每个固件创建单独的控制器,只要固件版本在参数中,它们就可以全部转到同一个控制器。

这不是重复的:明白为什么吗?好吧,那很好,除非固件不发送版本,我必须通过路径或参数的格式来推断它。实际上,我更喜欢在这种情况下使用控制器关注点,因为我并不完全相信模型应该知道参数。