我尝试使用链接保存图片点击的摘要。
在视图中:
#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
我做错了什么?
答案 0 :(得分:1)
<强>增量强>
除了在您的数据库中设置default
值0
之外,您还需要使用名为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