【发布时间】:2011-12-18 21:37:11
【问题描述】:
我无法弄清楚为什么我们的 ruby 代码没有在 coffeescript 中呈现。最终,我们正在努力在谷歌地图视图中绘制一系列存储在 Rails 模型中的标记。因为我们遇到了循环问题,所以我们尝试获取一个测试变量以在警报中呈现;它不工作。弹出警报,但它只说 Hello,而不是 Hello 5(或 Hello "5" ?)
这是我们的咖啡脚本文件 (locations.coffee.erb)
$ ->
alert "Hello <%= @test %>"
latlng = new google.maps.LatLng(43.0, -107.0);
myOptions =
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
point = new google.maps.LatLng(43.0, -107.0);
marker = new google.maps.Marker({
position: point,
map: map,
title: "Test",
});
@test 在#map 中定义,位于locations_controller.rb 的底部:
class LocationsController < ApplicationController
def show
@traveling_party = TravelingParty.find_by_id(session[:party])
@location = Location.where("position >= #{@traveling_party.position}").order("position ASC").first
end
def move
f = params[:traveling_party]
@traveling_party = TravelingParty.find(f["id"])
@traveling_party.speed = f["speed"].to_i
@traveling_party.ration = f["ration"].to_i
@location = Location.where("position > #{@traveling_party.position}").order("position ASC").first
@traveling_party.position += @traveling_party.speed
if @traveling_party.position > @location.position
@traveling_party.position = @location.position
end
food_eaten = @traveling_party.ration * @traveling_party.people
Item.where({:trader_id => @traveling_party.id, :type => "Food"}).limit(food_eaten).destroy_all()
if @traveling_party.save()
flash[:notice] = "Successfully updated traveling party."
redirect_to '/play/'
else
flash[:error] = "Transaction could not be completed."
redirect_to '/play/'
end
end
def map
@traveling_party = TravelingParty.find_by_id(session[:party])
@locations = Location.all
@test = "5"
end
end
我觉得奇怪的是 @test 在我们的 map.html.erb 视图中正确呈现。不出所料,地图上方印有 5:
<% @locations.each do |loc| %>
<% end %>
<div id="map_canvas">Random</div>
【问题讨论】:
-
您的
locations.coffee.erb文件在哪里?如果它在assets中,那么它只会被处理一次,并且此时不会包含您当前请求的上下文......所以您的 ERB 对您的推断知之甚少。 -
@Romain -locations.coffee.erb 在 assets/javascripts 中。如果我们将 javascript 放在 map.html.erb 中并完全摆脱 locations.coffee.erb,我们会解决这个问题吗?
-
@apneadiving - 看起来它确实可以解决我们的问题......虽然我是 Rails 新手,所以从头开始编写它可能比使用 gem 更容易
-
@jmaliakal 您可能会通过使用 gems 而不是尝试从头开始编写来节省一些理智。并回答你的问题 - 是的,它会解决你的问题,但它会被认为是不好的做法。
标签: ruby-on-rails coffeescript erb