【问题标题】:Add quotes to an ID in json with rails使用rails将引号添加到json中的ID
【发布时间】:2012-06-25 17:02:17
【问题描述】:

我当前的 json 输出是 "id":3,"name":"test",我需要 3 为 "3"。

我将如何在 Rails 中执行此操作?

  def search
    @tags = Tag.where("name like ?", "%#{params[:q]}%")
    respond_to do |format|
      format.json { render :json => @tags.to_json(:only => [:id, :name]) }
    end
  end

【问题讨论】:

  • 为什么需要3 成为"3"
  • 另一个插件因此而崩溃
  • 还有什么插件?您是否考虑过修复其他插件?
  • 那是我的下一个选择:/ .. 它的 jquery-tokeinput

标签: ruby-on-rails ruby ruby-on-rails-3 json


【解决方案1】:

Sergio 的解决方案会奏效。但是,如果您在多个地方执行此操作,我建议您覆盖 Rails 的内置函数 as_json

在您的Tag 模型中:

def as_json(options={})
  options[:id] = @id.to_s
  super(options)
end

您的控制器方法将保持不变。这是未经测试的,但应该可以工作。

【讨论】:

    【解决方案2】:

    类似这样的:

    format.json do
      tags = @tags.to_json(:only => [:id, :name])
      render :json => tags.map{|t| t['id'] = t['id'].to_s; t}
    end
    

    【讨论】:

    • 当我加载它时,我收到错误“参数太少”:app/controllers/tags_controller.rb:9:in format' app/controllers/tags_controller.rb:9:in search'
    • 也许错误在其他地方。我在我的 sn-p 中没有看到错误。
    【解决方案3】:

    这是唯一对我有用的解决方案:

      def search
        @tags = Tag.where("name like ?", "%#{params[:q]}%")
        respond_to do |format|
          format.json { render :json => @tags.map {|t| {:id => t.id.to_s, :name => t.name }} }
        end
      end
    

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多