gpt4 book ai didi

ruby-on-rails - 使用 ruby​​ on rails 为用户登录创建一个计数方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:57 25 4
gpt4 key购买 nike

我想要的:用户登录到他的帐户并自动更新他自己的计数器 (@counter += 1)。

我是 Ruby 和 Rails 的新手,我使用的是 Rails 3.2.12。我读了“ Eloquent ruby ”一书,搜索了关于这个问题的计算器,并观看了来自 pragmaticsstudio.com 的视频 ruby 类(class)。在那个视频类(class)中,他们创建了一个这样的类:

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 解决的,我的问题来了,因为用户模型中的每个方法对于 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“创建”方法,如下所示:

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

有了这个,我没有收到任何错误,但计数器仍然没有改变。我比以往任何时候都更加困惑。请告诉我在哪里放置该方法或如何为我丢失的应用程序解决此问题。

最佳答案

您的计数器没有增加,因为它没有保存到数据库中。您使用的实例变量仅对当前请求有效。一旦您重定向并重新加载页面,垃圾收集器就会丢失该对象以及您的计数器。

要使计数器持久化,您需要在用户上创建一个新列来保存计数器,然后您可以使用 Rails 提供的增量方法。

# create the migration

rails g migration add_sign_in_count_to_users sign_in_count:integer
rake db:migrate

# Then increment

class User < ActiveRecord::Base
def w00t
increment! :sign_in_count
end
end

ActiveRecord::Persistence#increment!

关于ruby-on-rails - 使用 ruby​​ on rails 为用户登录创建一个计数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com