我有一个保存城市 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 服务器在定义 city_id
之前解析 html.erb
View 。
city_id
是客户端浏览器在接收到包含 var city_name = #{City.find(city_id).name} 的 View 后定义的 Javascript 变量。 ;
.
您可以执行一个 Ajax 调用,在服务器上执行 City.find(city_id).name
并用响应填充 var city_name
。一旦您知道用户已使用一些您可以使用的文本(即 city_id)填充了 input
,您就可以像这样进行调用(将其放在 View 中或单独的 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
}
});
Controller 中的端点将如下所示:
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 - Javascript 中的 Ruby 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912009/