2016-08-01 48 views
0

我正在嘗試使用Rails構建一個應用程序,該應用程序允許用戶使用地理位置(地址是特定的)搜索工作列表。我正在使用'geocoder'寶石。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 

和我的觀點僅包括:(jobs.html.erb)

<%= @jobs %>  

,如果我在視圖中運行

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

它只是返回

ActiveRecord::StatementInvalid in Jobs#location 

任何人都可以解釋我正在發生什麼以及我如何訪問數據? 以及活動記錄關係的實際含義是什麼?

我對編碼還很陌生,而且這完全讓我難住。我無法在任何地方找到答案。 真的很感謝任何幫助,謝謝!

+0

你能在控制器運行'@ jobs.count'? –

+0

我可以在rails控制檯中運行@ jobs.length並且它返回1(只有一個atm作業)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#位置 – pauly

+0

我可以在控制檯中使用job = Job.near('sydney',10 ),然後我可以使用job [0] .title,它返回我正在尋找的內容。無論我嘗試什麼,相同的代碼在rails控制器中似乎都不起作用! – pauly