2012-02-03 14 views
1

私は場所IDを渡そうとしているfind_by_sqlステートメントを持っています。それは未定義の変数に関するエラーがスローされますがrails3のモデルにurlパラメータを渡すことはできますか?

a.location_id = '#{id}' 

:私は以下のURLからIDパラメータを引くと考えました

def self.location_history() 
     Location.find_by_sql("select * from locations a INNER JOIN hotspots b ON a.id = b.location_id INNER JOIN accounts c ON b.mac = c.account_id WHERE a.location_id= '#{id}'") 
    end 

:私はこのような何かを行うことができると思いました。

私は要求して送信されているID =>「2」パラメータを見ることができますが、私はモデルから呼び出す方法を知りません。もし可能であれば?

答えて

4

あなたはRailsのモデルから「のparams」ハッシュにアクセスすることはできません。 Paramsはコントローラーとビューが相互作用するためのものです。

あなたが代わりにこのような何かをモデルに、コントローラから必要な値を渡すことができます、まだ

def index 
    @location_history = Location.location_history(params[:id]) 
end 

またはそれ以上のRailsでこのような何かを:

def self.location_history(location_id) 
    Location.find_by_sql("select * from locations a INNER JOIN hotspots b ON a.id = b.location_id INNER JOIN accounts c ON b.mac = c.account_id WHERE a.location_id= '#{location_id}'") 
end 

とコントローラで3はクリーナーです。また、SQLインジェクションからlocation_idパラメータをエスケープします。

def self.location_history(location_id) 
    joins(:hotspots, :accounts).where(:location_id => location_id) 
end 

現在のモデルであるため、最初は「場所」は必要ありません。あなたの関連が正しければ、 "joins"スコープを使用してこれらのテーブルをリンクし、必要なパラメータを "where"に渡すだけです。

+0

Mucho gracias :) – simonmorley

+0

実際にはエラーが発生しています。 0 for 1) " – simonmorley

+0

私の過ちは、私のビューで@ location_history.each.doに変更するのを忘れてしまった。 – simonmorley

関連する問題