Ruby on rails 如何查询postgreSQL数据库以检查值是否存在?

Ruby on rails 如何查询postgreSQL数据库以检查值是否存在?,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,大家好,谢谢你们在这里的出色工作 我正在用RubyonRails和postgresql构建一个应用程序。我已成功连接到我的数据库,我可以查询数据库,并在控制台中显示响应,没有问题 我的数据库包含美国所有的邮政编码和城市(45k+行)。下一个setp将从用户那里获取输入,查询邮政编码列以查看zipcode是否存在,如果存在则返回(yes),如果不存在则返回(no) 这是我的密码: class PgGem_test @failmess = "Error : the postgreSQL ge

大家好,谢谢你们在这里的出色工作

我正在用RubyonRails和postgresql构建一个应用程序。我已成功连接到我的数据库,我可以查询数据库,并在控制台中显示响应,没有问题

我的数据库包含美国所有的邮政编码和城市(45k+行)。下一个setp将从用户那里获取输入,查询邮政编码列以查看zipcode是否存在,如果存在则返回(yes),如果不存在则返回(no)

这是我的密码:

class PgGem_test
    @failmess = "Error : the postgreSQL gem has not been loaded correctly"
    begin
        @var_pg = require 'pg'
    rescue LoadError
        puts "#@var_pg | #@failmess"
    end
end

conn = PGconn.connect(:hostaddr=>"127.0.01", :port=>5432, :dbname=>"wp-app", :user=>"postgres", :password=>'Password2017')

res = conn.exec("select * from us_cities")

res.each { |row|
    id = res[0]['id']
    name = res[0]['name']
    zip_codes = res[0]['zip_codes']


    puts "id="+row['id']+ " | name="+row['name']+ " | zip code="+row['zip_codes']
}

conn.close
它会返回这样的结果

id=45395 | name=West Hamlin | zip code=25506 25571
id=45396 | name=West Liberty | zip code=26003 26074
id=45397 | name=West Logan | zip code=25601
id=45398 | name=West Milford | zip code=26451
id=45399 | name=Weston | zip code=26452
id=45400 | name=Westover | zip code=26501
id=45401 | name=West Union | zip code=26456
id=45402 | name=Wheeling | zip code=26003
id=45403 | name=White Hall | zip code=26554
id=45404 | name=White Sulphur Springs | zip code=24925 24986
id=45405 | name=Whitesville | zip code=25209
id=45406 | name=Whitmer | zip code=26296
id=45407 | name=Wiley Ford | zip code=26753 26767
id=45408 | name=Williamson | zip code=25661
id=45409 | name=Williamstown | zip code=26187
id=45410 | name=Windsor Heights | zip code=26075
id=45411 | name=Winfield | zip code=25213
id=45412 | name=Wolf Summit | zip code=26422 26426
id=45413 | name=Womelsdorf (Coalton) | zip code=26257
我希望从用户(zipcode)查询zipcode列中获取输入,仅检查zipcode是否存在并返回响应

我不知道从哪里开始,希望能得到一些帮助

谢谢

您的问题是

conn = PGconn.connect(:hostaddr=>"127.0.01", :port=>5432, :dbname=>"wp-app", :user=>"postgres", :password=>'Password2017')
sql = "SELECT \"us_cities\".* FROM \"us_cities\" WHERE \"us_cities\".\"zip_codes\" = #{params[:zip_code]}"
res = conn.exec(sql)
p res.present?
conn.close
我只是想知道,尽管在rails上,您没有使用
activerecord
,如果您使用,您只需使用

UsCity.where(zip_codes: params[:zip_code]).exists?
#=> true/false

我的计划是避免使用活动记录,但我仍在与我的同事讨论最好的方法,所以答案对你来说是有意义的?只需将你的代码从
conn=…
替换为
conn.close
,你必须考虑如何传递用户输入(params).不过,快速问一下:我把这个输入到了main:Object(NameError)的未定义的局部变量或“params”方法中。如何修复?确切地说,这就是我在这里传递用户输入的意思,目前您可以硬编码您的
zipcode
替换
{params[:zip\u code]}
。我假设您可能有一个表单,其中用户输入
zipcode
作为参数,该参数需要作为参数传递到这里