繁体   English   中英

Javascript中的Ruby代码

[英]Ruby code inside Javascript

我有一个保存城市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 我尝试了这段代码,但没有成功:

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

我的错误在哪里? (我是Ruby的新手)

这是行不通的,因为Rails服务器解析html.erb前视图city_id定义。

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

您可以执行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

您需要使用javascript传递数据。 这是从此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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM