繁体   English   中英

Rails 3-单击到link_to时增加模型数据

[英]Rails 3 - Increment Model Data on click to a link_to

我正在做一个小图片应用程序。 我想做的是建立一个计数器来跟踪每个图像被单击了多少次。

现在我认为:

<% @galleries.each do |g| %>
    <% for image in g.images %>
    <div id="picture">
      <%= render 'top_nav'%>

      <%= link_to g.source, :target => true do %>
        <%= image_tag image.file_url(:preview) %>
        <% g.vote %>
      <% end %>

      <%= will_paginate(@galleries, :next_label => "Forward", :previous_label => "Previous") %>
    </div>

显然,这是行不通的,因为g.vote每次渲染时都会执行,而不是单击。 这是我模型中的表决方法:

def vote
    self.increment!(:score)
end

我正在寻找一种仅在单击上面的图像时才运行表决方法的解决方案。 链接仅指向外部资源,而不是显示动作。 我是否应该构建一个接受帖子,执行投票然后重定向到源的控制器操作?

无论如何,寻找一些想法,谢谢。

我做过类似的事情,但保留了单击“下载”链接的次数。 这是前一段时间,当时我还不了解Ajax,但是现在我建议使用jQuery(我认为这是一个很棒的库,但是您可以使用其他东西),并在单击图像时执行Ajax调用执行一些控制器操作,该操作将增加该投票。

另一种方式,这就是我在场景中所做的,也是您在此处所说的,是在接受帖子的控制器中创建自定义操作。 但是我也要问,点击图片是否会对您网站的行为产生其他影响? 例如,如果单击图片时应该显示另一个随机图像,这意味着您已经有一个加载新图像的动作,并且在显示新图像之前很容易在其中进行投票。 否则,您将不得不创建新的控制器动作。 在这种情况下,Ajax会更高效,因为刷新页面时用户不会看到瞬间的闪烁(尤其是刷新时间较长时,效果尤其糟糕)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM