Rails:网站上的实例变量没有通过ajax

时间:2016-09-26 13:28:09

标签: javascript ruby-on-rails ajax ruby-on-rails-4 coffeescript

我的目标是使用coffeescript从视图中的number_field读取值,将值发送到控制器,然后将控制器中的数值发送回视图。

在coffeescript文件中,我使用console.log(qty)作为检查,看看coffeescript是否能够读取number_field值。这张支票通过了。

在控制器中,我使用puts "received #{@n}"puts "not received"作为检查。在页面加载时,else部分应该执行,因为.change事件尚未触发。当数字字段改变时,if部分应该执行。此测试正确通过。更改数字字段后,@n的正确值将打印到rails控制台。这意味着控制器操作会收到params[:quantity]

最后一步是让$('#insert-here').load(location.href+" #insert-here")重新加载页面上的#insert-here div。为了检查这一点,我在视图中添加了<%= Time.now %>以查看时间戳更改。此测试也会通过,但视图中的<h1><%= @n %></h1>会继续显示数字1。它没有更新。我该如何解决这个问题?

查看

<%= oi.number_field :quantity, value: 1, class: 'form-control', id: 'quantity-select', min: 1 %>
<div class="col-xs-12" id="insert-here"><h1><%= @n %></h1><h2><%= Time.now %></h2></div>

的CoffeeScript

ready = ->
  $('#quantity-select').change ->
    qty = document.getElementById('quantity-select').value
    $.ajax
      complete: (request) ->
      data: { quantity: qty }
      console.log(qty)
      $('#insert-here').load(location.href+" #insert-here")
    return
  return
$(document).ready(ready)   

控制器

 def show
   if params[:quantity].present?
     @n = params[:quantity]
     puts "received #{@n}"
   else
     @n = 1
     puts "not received"
   end  
end

0 个答案:

没有答案