Rails 3 - 点击链接增加模型数据到link_to

时间:2011-07-26 17:10:53

标签: ruby-on-rails ruby-on-rails-3

我正在开发一个小图片应用程序。我正在尝试做的是建立一个计数器来跟踪每个图像被点击的次数。

现在我认为:

<% @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

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

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

1 个答案:

答案 0 :(得分:1)

我做过类似的事情,但要记下点击下载链接的次数。这是一段时间以前我当时并不知道Ajax,但现在我建议使用jQuery(我认为这是一个很棒的库,但你可以使用别的东西)并在点击图像时进行Ajax调用执行一些控制器动作,这将增加该投票。

另一种方式,就是我在我的场景中所做的,也就是你在那里谈到的,是在控制器中创建一个接受帖子的自定义动作。但是我也要问一下,点击图片会对你网站的行为做些什么吗?例如,如果单击图片时,应该会出现另一个随机图像,这意味着您已经有了加载新图像的操作,并且在显示新图像之前很容易将投票保持在那里。否则,您必须创建新的控制器操作。如果是这种情况,Ajax会更有效率,因为用户在页面刷新时不会看到瞬间闪烁(如果刷新时间很长,则特别糟糕)。