【问题标题】:Rails activerecord returning wrong resultsRails activerecord 返回错误结果
【发布时间】:2013-06-03 17:50:42
【问题描述】:

我正在开发一个简单的 rails 应用程序,并且我有一个自定义方法可以返回最后创建的列详细信息

def getid
    @b_id = params[:bid]
    @log_id = Log.where("bid = ?",@b_id).last.to_json
    respond_to do |format|
        format.html{render :text => @log_id}
        format.json{render :json => @log_id}
    end
end

该列在后端运行以下查询

Log Load (0.2ms)  SELECT `logs`.* FROM `logs` WHERE (bid = 'B01') ORDER BY `logs`.`logid` DESC LIMIT 1

对应的列值为id:3,logid:20002

返回的json是{u'id' : u'20002, u'logid' : u'20002'}

我的问题:

  1. 为什么 rails 会在每个 JSON 元素中添加 u
  2. 为什么返回的 id 是 20002 而不是 3? (id 为自增且唯一键,logid 为主键)

编辑:

我发现字符 u 被添加到 python 端,因为它们是 unicode 字符串,并删除了它,如下所示

【问题讨论】:

  • 我正在使用python请求来获取json

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


【解决方案1】:

你不需要在这一行的对象上调用to_json

@log_id = Log.where("bid = ?",@b_id).last.to_json

只要原始对象就好了。

@log_id = Log.where("bid = ?",@b_id).last

因为当你调用render json: @obj 时,会有一个动作将 obj 转换为 json。无需重复。

【讨论】:

  • 我摆脱了 to_json 方法,但我仍然得到 20002 而不是 3 的 id(id 是 rails 生成的内部 id 列)
猜你喜欢
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2015-07-18
  • 2021-05-05
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多