[英]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.