我有一个保存城市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很新)
答案 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。