我在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?
答案 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
的实际操作(即它不是数据库适配器问题,而是实际数据库的能力)服务器)。