使用自定义路由计算Rails中网址的点击次数。

时间:2014-08-07 09:24:49

标签: ruby-on-rails ruby controller routes

我尝试使用链接保存图片点击的摘要。

在视图中:

#holder
      .hidden-phone
        .banner-left
          - @left_banner.each do |f|
            = link_to image_tag(f.image.url), click_banner_url(f)
        .banner-right
          - @right_banner.each do |f|
            = link_to image_tag(f.image.url), click_banner_url(f)

在控制器中:

def click
        @banner = Banner.find(params[:id])
        @banner.update(clicks: @banner.clicks + 1)
        redirect_to @banner.link
end

在路线中:

resources :banners do 
    member do
      get 'click'
    end
end

我收到错误:

BannersController中的NoMethodError#click

未定义的方法`+'为零:NilClass

我做错了什么?

1 个答案:

答案 0 :(得分:1)

<强>增量

除了在您的数据库中设置default0之外,您还需要使用名为increment的更简洁的方法,该方法会将1添加到您的列的值无论如何:

  

increment

     

如果为nil,则将属性初始化为零,并添加传递的值   (默认为1)。增量直接在底层执行   属性,不调用setter。只对数字有意义   属性。返回自我。

从这一点来看,你最好这样做:

def click
    @banner = Banner.find(params[:id])
    @banner.increment!(:clicks) #-> saves the record
    redirect_to @banner.link
end

-

过滤器

要考虑的其他事项 您实现了所需的功能

你提到你在点击横幅时指导人们通过“自定义路线”。这增加了额外的复杂性,而不需要存在。您只需在应用程序中使用filter

#app/controllers/banners_controller.rb
Class BannersController < ApplicationController
   before_action :click

   def show
      ... logic here
   end

   private

   def click
      @banner = Banner.find params[:id]
      @banner.increment!(:click)
   end
end