2011-08-15 41 views
4

我有四个函数,我通过ajax调用传递几个参数。我建立使用javascript其中的一个作为例子的网址:Rails 3在手动构建的链接中将参数传递给控制器​​的正确方法是什么?

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

在我的routes.rb我必须设置为接听的电话发送到正确的控制器四个不同的条目。这里是一个:

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

一切工作正常,但我想知道如果这是一个合法的轨道3的做法吗?如果不是,我应该如何修改我的路线,以及正确的网址是什么样的?

感谢您的任何意见。

回答

4

这很好。

当在js和ruby的边界工作时,没有太多可用的语法糖。

+2

+1 “语法糖”,我喜欢它。 – sholsinger

+1

@sholsinger:是的,小心糖尿病! :) – apneadiving

+0

谢谢你只是想确保没有一些Rails功能,我错过了使这个更清洁/更容易。 – Xaxum

1

有一个更灵活的解决方案,用于在js和rails之间共享url。通过链轮,您可以通过ERB运行您的资产,然后您可以通过这种方式获得您的网址助手。

例如,你可以写出一个变量的URL,你的参数硬编码到你可以在JS中替换的东西。这样,您可以更改自己的网址,而无需担心(尽可能多)改变应用中的网址。

如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?所以在我的情况下,我不会有我的JavaScript在application.js但在.js.rjs,因为我使用原型? – Xaxum

+0

链轮将根据扩展名筛选您的资产。使用默认的rails设置,它不理解rjs,所以'.js.rjs'不会做任何事情。你所需要的只是一个带有'.js.erb'的文件来做我在这里做的事情。如果我要走这条路线,我会制作一个'urls.js.erb'并导出我想要的网址,写一些处理网址的功能等。 – jdeseno

相关问题