Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jQuery更新rails模型上的字段?_Jquery_Ruby On Rails_Coffeescript - Fatal编程技术网

如何使用jQuery更新rails模型上的字段?

如何使用jQuery更新rails模型上的字段?,jquery,ruby-on-rails,coffeescript,Jquery,Ruby On Rails,Coffeescript,我有一个模型,玩家,有一个场总积分 在我的主页上,我有球员姓名和总积分: <div id="player1"> <h3><%= "#{@player1.first_name} #{@player1.last_name} (#{@player1.total_points})" %></h3> </div> 这是可行的(如中所述,它将消息记录到控制台),但我不确定如何将click@player1.total_points增加1,然后重

我有一个模型,玩家,有一个场总积分

在我的主页上,我有球员姓名和总积分:

<div id="player1">
  <h3><%= "#{@player1.first_name} #{@player1.last_name} (#{@player1.total_points})" %></h3>
</div>

这是可行的(如中所述,它将消息记录到控制台),但我不确定如何将click@player1.total_points增加1,然后重新呈现上面的消息(最好不重新加载整个页面)。谢谢

既然您选择使用jquery(我认为这可能是计算时代最伟大的发明:),这就相对容易了

您需要使用post命令,该命令将使用AJAX发回您的应用程序。因此,在您的例子中,coffeescript将是$('#player1')。单击->$。根据


然后,success方法可以获取返回数据并对其进行处理。如果此时html发生了更改,则可以返回html并用JQuery替换相应的html块。您还可以根据需要返回JSON、XML等。我认为在这种情况下,返回一块html可能是合适的。您需要一个适当的视图进行渲染。

如果您调整HTML,以便轻松找到总积分,您将有一个更好的时间。大概是这样的:

<div id="player1">
  <h3>
    <%= "#{@player1.first_name} #{@player1.last_name}" %>
    (<span class="total"><%= @player1.total_points %></span>)
  </h3>
</div>
$ ->
  $('#player1').click (e) ->
    e.preventDefault()
    $.post 'whatever-the-url-is', (new_total) ->
      $('#player1 .total_points').html(new_total)
$ ->
  $('#player1').click (e) ->
    e.preventDefault()
    $t = $('#player1 .total_points')
    $t.html(parseInt($t.html(), 10) + 1)
如果您没有在服务器上存储任何内容,则可以这样做:

<div id="player1">
  <h3>
    <%= "#{@player1.first_name} #{@player1.last_name}" %>
    (<span class="total"><%= @player1.total_points %></span>)
  </h3>
</div>
$ ->
  $('#player1').click (e) ->
    e.preventDefault()
    $.post 'whatever-the-url-is', (new_total) ->
      $('#player1 .total_points').html(new_total)
$ ->
  $('#player1').click (e) ->
    e.preventDefault()
    $t = $('#player1 .total_points')
    $t.html(parseInt($t.html(), 10) + 1)

谢谢,这真的很有帮助!快速跟进问题:在url调用的控制器操作中,我使用什么来引用新的_总数?我试过params[:new_total],结果是零。再次感谢?这取决于您调用的方式,通常您会说
$。发布“一些url”、数据、回调
,其中
数据
将是在控制器中的
参数
中结束的对象。因此,在CoffeeScript中使用的
数据
决定了如何解释
参数
。另外,你不会将新的总数发送到服务器,服务器只会向数据库发送一个列增量,从数据库中取出新的总数,然后将其发送回。谢谢你的反馈,但我对这一点非常陌生,我想这超出了我的理解。我上面包含的是我真实代码的简化版本。我的真实数据对象现在包含在上面。你能提供一个我如何在控制器中访问它的例子吗?我在你的问题中没有看到任何新的东西。基本上,您需要一个到
config/routes.rb
的路由,然后是该路由的控制器方法(只不过是一个调用),然后从数据库中加载总数,并将其作为响应发送回去。这取决于路由。您可能有一个
/player/:id/add_point
或类似内容的发布路径,然后
id
将位于URL中,您可以
$.POST”/player/{id}/add_point
其中
id
是保存播放器的
id
的本地(CoffeeScript)变量。谢谢!在url调用的控制器操作中,我使用什么来引用传递的数据?