Javascript中的Ruby代码

时间:2016-01-20 22:38:57

标签: javascript ruby-on-rails ruby

我有一个保存城市id值的Ruby表单:

= select_tag 'building[city_id]',
options_for_select(cities.map{|c| [c.name, c.id]})

我使用Javascript保存该ID:

var city_id = $('#building_city_id').val();

我的问题是我还需要一个城市名称的Javascript变量,我可以使用Ruby来获取这个:City.find(@building.city.id).name。 我尝试了这段代码,但它没有wotk:

var city_name = #{City.find(city_id).name};

我的错误在哪里? (我对Ruby很新)

2 个答案:

答案 0 :(得分:1)

它不起作用,因为Rails服务器在定义html.erb之前解析city_id视图。

city_id是客户端浏览器接收包含var city_name = #{City.find(city_id).name};的视图后定义的Javascript变量。

您可以执行Ajax调用,该调用将在服务器上执行City.find(city_id).name并使用响应填充var city_name。一旦你知道用户填写了input一些你可以使用的文本(例如city_id),就可以像这样进行调用(把它放在视图中或单独的js文件中):

$.ajax({
  type: "GET",
  url: "/your_ajax_endpoint",
  dataType: 'json',
  data: {'city_id': city_id},
  success: function(data) {
    var city_name = data;
  },
  error: function(data) {
    // Error handling
  }
});

控制器中的端点如下所示:

def my_ajax_endpoint
    city_name = City.find(city_id).name
    respond_to do |format|
      format.json { render json: city_name.to_json }
    end
end

答案 1 :(得分:0)

您需要使用javascript传递数据。以下是this RailsCast

中的示例

products / index.html.erb

<%= content_tag "div", id: "products", data: {products: Product.limit(10)} do %>
  Loading products...
<% end %>

app / assets / javascripts / products.js.coffee

jQuery ->
  alert $('#products').data('products')

或者您可以使用gon gem