【问题标题】:Pass variable from Controller to Serializer in Rails在 Rails 中将变量从控制器传递到序列化器
【发布时间】:2018-06-27 11:29:33
【问题描述】:

我的控制器中有此代码,以获取从一个位置到另一个位置的距离(以米为单位):

range = Geocoder::Calculations.distance_between([lat,lng],[Model.location.lat,Model.location.lng])
rangeInMeters = range * 1000            
rangeRounded = rangeInMeters.round
rangeRounded = rangeRounded / 100 * 100

我的序列化程序中有这段代码,以便为 json 响应提供更好的输出,如下所示:

class ModelSerializer < ActiveModel::Serializer
  attributes :id, :name, :address, :range

  def range
  // something
  end
end

如何让 ModelSerializer 读取 rangeRounded,因此在 json 响应中它会是这样的:

{
        "id": 1,
        "name": "Name A",
        "address": "Address A",
        "range": 500
    },

【问题讨论】:

  • 这个答案应该会有所帮助:stackoverflow.com/a/37956952/2545197
  • 这个我试过了,不行,不知道怎么回事
  • 你能举个例子吗?
  • 当然,attributes :id, :name, :address, :range # has_many :locations def range puts @instance_options[:rangeRounded] end

标签: ruby-on-rails json ruby active-model-serializers


【解决方案1】:

如果我理解正确,您的模型有location,其中有latlng。并且您想在您的序列化程序方法中访问这些字段。

您可以使用object.访问这些字段

RailsCasts - Active Model Serializers episode

#controller
def action
    ...
    range = Geocoder::Calculations.distance_between([lat,lng],[Model.location.lat,Model.location.lng])
    range_in_meters = range * 1000            
    range_rounded = range_in_meters.round
    range_rounded = range_rounded / 100 * 100
    ...

    render json: @model, serializer: ModelSerializer, range_rounded: range_rounded
end


#serializer
class ModelSerializer < ActiveModel::Serializer
    attributes :id, :name, :address, :range
    #point assosiations here (same as in model)

    def range
        puts @instance_options[:range_rounded]
    end
end

【讨论】:

  • 您能详细说明一下吗?我仍在学习这个序列化程序。非常感谢。
  • 在您想要响应序列化的model 和型号的位置提供您的控制器代码
  • 需要从上面的帖子序列化的rangeRounded 变量。
  • 这个出现了,和我以前一样,先生undefined local variable or method rangeRounded
  • 做了一些修改。再试一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多