Javascript中的Ruby代码

Ruby code inside Javascript

本文关键字:代码 Ruby 中的 Javascript      更新时间:2023-09-26

我有一个保存城市 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 很陌生)

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

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

您可以执行一个 Ajax 调用,该调用将在服务器上执行City.find(city_id).name并用响应填充var city_name。一旦你知道用户已经用一些你可以使用的文本(即city_id)填充了一个input,你可以像这样进行调用(把它放在视图中或单独的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中获取的示例。

产品/索引.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')

或者你可以使用贡宝石。