2016-08-01 4 views
0

私は、ユーザーが地理的な場所(特定のアドレス)を使用して求人情報を検索できるようにするRailsでアプリケーションを構築しようとしています。私は 'ジオコーダー'宝石を使用しています。Ruby on Rails Geocoder Gem。近くの検索結果が混乱したデータを返す

宝石「ジオコーダ」

私は成功し Job.near(「シドニー」、10)を使用して、レールのコンソールを使って検索することができますし、それが配列に私のデータベースからのリストを返します。

2.2.2 :001 > Job.near('sydney', 10) 
    Job Load (97.5ms) SELECT jobs.*, 6371.0 * 2 * ASIN(SQRT(POWER(SIN((-33.8688197 - jobs.latitude) * PI()/180/2), 2) + COS(-33.8688197 * PI()/180) * COS(jobs.latitude * PI()/180) * POWER(SIN((151.2092955 - jobs.longitude) * PI()/180/2), 2))) AS distance, MOD(CAST((ATAN2(((jobs.longitude - 151.2092955)/57.2957795), ((jobs.latitude - -33.8688197)/57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing FROM "jobs" WHERE (jobs.latitude BETWEEN -33.958751860591875 AND -33.77888753940813 AND jobs.longitude BETWEEN 151.10098469477293 AND 151.31760630522706 AND (6371.0 * 2 * ASIN(SQRT(POWER(SIN((-33.8688197 - jobs.latitude) * PI()/180/2), 2) + COS(-33.8688197 * PI()/180) * COS(jobs.latitude * PI()/180) * POWER(SIN((151.2092955 - jobs.longitude) * PI()/180/2), 2)))) BETWEEN 0.0 AND 10) ORDER BY distance ASC 
=> #<ActiveRecord::Relation [#<Job id: 73, title: "Dog walkingn", description: "walk my dog everyday", price: "$25", user_id: "24", timeframe: "daily", created_at: "2016-07-29 05:50:00", updated_at: "2016-07-29 05:50:00", location: nil, job_type_id: "3", street_number: "100", street: "Pitt Street", suburb: "Sydney", state: "NSW", postcode: "2000", country: "Australia", longitude: 151.2092955, latitude: -33.8688197>]> 

しかし、私は、コントローラでこれを行うと、私が得るすべてがあり、試してみて、ビュー(jobs.html.erb)にデータを送信する:ここ

#<Job::ActiveRecord_Relation:0x007fd66475abd8> 

は私のコントローラのコードです:

DEF位置

if params[:location].present? 
    jobs = Job.near(params[:location], 
    params[:proximity]) 

    @jobs = jobs 
else 
    @noJobs = 'there is nothing nearby' 
    @jobs = nil 
end 

と私の見解のみで構成されています。私はそれだけで誰でもに説明することができ

ActiveRecord::StatementInvalid in Jobs#location 

を返すビューで

<%[email protected][0].title%> 

を実行する場合(jobs.html.erb)

<%= @jobs %>  

私は何が起こっているのですか、どのようにデータにアクセスできますか? 実際にアクティブなレコード関係は何を意味していますか?

私はまだコーディングに新しく、これは私を完全に困惑させました。私はどこでも答えを見つけることができません。 本当にありがとうございました!

+0

あなたがコントローラに '@のjobs.count'を実行できますか? –

+0

railsコンソールで@ jobs.lengthを実行すると、jobs.countが動作しておらず、コントローラでも動作していません。( – pauly

答えて

0

ご覧のとおり、@jobsは、ActiveRecord::Relationオブジェクトです。これは基本的にActiveRecordオブジェクトの配列です。ビューでそれらを表示するには、最も可能性の高いeach、ループのいくつかの並べ替えを使用する必要があります:

<% @jobs.each do |job| %> 
    <%= job %> 
<% end %> 

また、<%= job %>だけでトリックを行うかもしれません。それはidのオブジェクトのようなものを返します。あなたは、オブジェクトのjob.titleまたはいくつかの他の属性/メソッドを呼び出す必要がありますので、あなたは、ビュー内の実際の値を取得する:

<% @jobs.each do |job| %> 
    <%= job.title %> 
<% end %> 
+0

答えのおかげで、私はほとんどすべてを試しました私はそれがそうであると考えることができます。上で提案したものはエラーを返します。ActiveRecord :: StatementInvalid in Jobs#location – pauly

+0

コンソールで必要なデータにアクセスできます。job = Job.near( 'sydney'、10 )そして私はjob [0] .titleを使用することができ、探しているものを返します。同じコードが何を試してもレールコントローラで動作しないようです! – pauly

関連する問題