我想要什么:用户登录他的帐户并自动更新他自己的计数器(@counter += 1)。
我是 Ruby 和 Rails 的新手,我正在使用 Rails 3.2.12。我阅读了《雄辩的 ruby》一书,搜索了有关此问题的 stackoverflow,并观看了 pragmaticstudio.com 的视频 ruby 课程。在那个视频课程中,他们创建了一个这样的类:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :counter
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
def initialize(counter=0)
@counter = counter
end
def w00t
@counter += 15
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
现在在我的应用程序中,用户登录是通过 SessionsController 解决的,我的问题来了,因为来自 User 模型的每个方法对于 SessionsController 来说都是“未知的”。
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or templates_path
else
flash.now[:error] = 'something went wrong.'
render 'new'
end
end
def destroy
sign_out
redirect_to root_url
end
end
这是我已经尝试过但不适用于我的解决方案的方法:我添加了
user.w00t
在 SessionsController 中,上面的 1 行
sign_in user
返回的错误是:“SessionsController 的未定义方法‘w00t’”。
我还尝试在 Sessions Helper 中编写一个方法:
def woot(template)
template.counter += 1
end
然后我重新订购了我的 SessionsController 'create' 方法,如下所示:
def create
template = Template.find_by_bosskey(params[:bession][:bosskey])
if template
woot template #that is my new line !
tsign_in template
redirect_back_or template
else
flash.now[:error] = 'something went wrong.'
render 'new'
end
end
有了这个我没有得到任何错误,但计数器仍然没有改变。我比以往任何时候都更加困惑。请告诉我在哪里放置该方法或如何为我的应用解决此问题,我迷路了。