Rails 3在手动构建的链接中将参数传递给控制器​​的正确方法是什么?

时间:2011-08-15 20:51:24

标签: ruby-on-rails ruby ruby-on-rails-3 routes

我有四个函数可以通过ajax调用传递几个参数。我用javascript构建了一个url的例子:

    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方式呢?如果不是,我应该如何修改我的路线以及正确的网址是什么样的?

感谢您的任何意见。

2 个答案:

答案 0 :(得分:4)

没关系。

当使用js和ruby在边界上工作时,可用的语法糖量不多。

答案 1 :(得分: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'});
}