我正在打电话
$.get('/profile', {'data_id': 0}, null, 'script');
当特定事件发生时,在我的profile/index.html.haml
中。这是假设在传递json数据时加载profile/index.js.erb
。在我的个人资料控制器的index
操作中,我有
@dataid = params[:data_id]
if @dataid == 0
#do something, ie set variables that index.js.erb needs
else
#do something else
end
但是,if
语句似乎不起作用,因此我认为我的js.erb
文件没有正确加载(根本不加载)。
但是,如果我执行if !dataid.nil?
而不是== 0 (or some other value)
,它的工作方式就像放入if语句/ js.erb之前的工作方式一样,它必须使得dataid 某些价值......
此外,如果我不使用if
语句,并且在我的js.erb
dataid = <%= raw @dataid %>; alert(dataid);
中,一切正常,警报正确 - dataid为0.那么为什么似乎首先设置raw @dataid
的控制器不知道@dataid
的值是多少?我很困惑......
除非需要(由data_id指定),否则主要目的是不在控制器中执行所有操作。另外这种方式我认为我能够在我的js.erb中做同样的事情 - 只根据这个参数运行我需要的部分。
答案 0 :(得分:1)
通过HTTP发送的所有内容都将以字符串形式到达。如果你与“0”比较,它很可能比较相等。在控制器代码中尝试这个:
Rails.logger.debug "All params are:\n#{params.inspect}"
Rails.logger.debug "I got params[:data_id] = '#{@dataid}'"
Rails.logger.debug "The type is: #{@dataid.class}"
Rails.logger.debug "Comparison yields: #{@dataid == 0}"
然后看日志。你会看到我在说什么。