2011-08-15 12 views
4

私はいくつかのパラメータをajax呼び出しで渡す4つの関数を持っています。私のroutes.rbをでRails 3手動で構築されたリンクのパラメータをコントローラに渡す正しい方法は何ですか?

function submitMake(year,make){ 
    new Ajax.Request('update_model/'+year+'/'+make, { method: 'get'}); 
} 

私は適切なコントローラに送信するための呼び出しを受信するように設定4つの異なるエントリを持っている:私はここ1の例ではJavaScriptを使用してURLを構築します。ここに1つです:

match 'car_infos/update_style/:year/:make/:model', :controller => 'car_infos', :action => 'update_style' 

これは正当なレールですか?そうでない場合は、ルートを変更する方法と適切なURLはどのように見えるのでしょうか?

ありがとうございます。

答えて

4

いいです。

jsとrubyの境界で作業しているとき、シンタックスの砂糖はあまりありません。

+2

+1。 – sholsinger

+1

@sholsinger:うんざりして糖尿病に注意してください! :) – apneadiving

+0

ありがとう、このクリーナー/簡単にするために欠けていたいくつかのRails機能がないことを確認したかったのです。 – Xaxum

1

jsとレールの間でURLを共有するためのより柔軟なソリューションがあります。スプロケットを使用すると、ERBを介して資産を実行できます。そうすれば、URLヘルパーにその方法でアクセスできます。

例えば、変数にURLを書き出すことができます。たとえば、パラメタをJSで置き換えることができるようにハードコードします。そうすれば、あなたのアプリであなたのURLを変更することについて心配することなく、あなたのURLを変更することができます。

例えばyour.js.erb:私はそれが好き "シンタックスシュガー" の

<% class << self; include Rails.application.routes.url_helpers; end %> 
var urls = {}; 
urls.make = <%= url_for(:only_path => true, 
         :controller => :car_infos, :action => :update_style, 
         :make => '%make', :year => '%year', :model => '%model').to_json %>; 
// urls.make will be: 'car_infos/update_style/%year/%make/%model' 

function submitMake(year, make, model) { 
    var path = urls.make.replace('%year', year).replace('%make', make).replace('%model', model); 
    new Ajax.Request(path, {method: 'get'}); 
} 
+0

スプロケットを指摘してくれてありがとう。私は以前これを使っていませんでした。私はちょっと準備しました。基本的には、.js.erbファイルを使用してすべてのjavascriptを処理できますか?だから私の場合、私はプロトタイプを使用しているので、私はapplication.jsではなく、.js.rjsで私のjavascriptを持っていないだろうか? – Xaxum

+0

スプロケットは、エクステンションに基づいて資産をフィルタリングします。デフォルトのレール設定ではrjsを理解できないので、 '.js.rjs'は何もしません。必要なのは、ここでやっていることをやるために '.js.erb'というファイルが必要です。もし私がこのルートに行くなら、私は 'urls.js.erb'を作り、私が望むURLをエクスポートし、URLを扱うためのいくつかの関数を書くなど – jdeseno

関連する問題