为什么这样:Rails中的id不能与Postgresql一起使用,但它可以与MySQL一起使用?

时间:2011-02-25 21:18:08

标签: mysql ruby-on-rails ruby postgresql activerecord

我在Rails中使用此方法用于搜索引擎友好的网址 - http://jroller.com/obie/entry/seo_optimization_of_urls_in

我的模特看起来像这样。

class Listing < ActiveRecord::Base
  def to_param
    "#{id}-#{title.parameterize}"
  end
end

这适用于MySQL,但不适用于Postgresql。

这是我得到的错误:

ActiveRecord :: StatementInvalid(PGError:错误:整数的输入语法无效:“16- college-station-apartments” :SELECT * FROM“floorplans”WHERE(“floorplans”。“listing_id”= E'16-college-station-apartments')订购床位ASC,浴室ASC,素材ASC,价格ASC):

ActiveRecord是否在查找Postgresql时没有执行.to_i?

1 个答案:

答案 0 :(得分:4)

对于某些方法,Rails会自动为您的参数调用to_i,主要是那些需要整数作为参数的方法,例如Listing.find(params[:id])

但是,对于可以接受字符串作为参数的其他类型的搜索方法,您需要手动调用to_i

Listing.find_by_id(params[:id].to_i)
Listing.find(:conditions => ["id = ?", params[:id].to_i])

你没有遇到MySQL问题的原因是MySQL在其结尾处做了to_i的实际操作(即它不是数据库适配器问题,而是实际数据库的能力)服务器)。