Ruby on rails 使用ruby on rails为用户登录创建计数方法
我想要的是:一个用户登录到他的帐户,他会自动更新自己的计数器(@counter+=1) 我是Ruby和Rails新手,现在使用的是Rails 3.2.12。我读了《雄辩的ruby》一书,就这个问题搜索了stackoverflow,并在PracticalStudio.com上观看了ruby课程视频。在那个视频课程中,他们创建了这样一个类:Ruby on rails 使用ruby on rails为用户登录创建计数方法,ruby-on-rails,ruby,session,login,counter,Ruby On Rails,Ruby,Session,Login,Counter,我想要的是:一个用户登录到他的帐户,他会自动更新自己的计数器(@counter+=1) 我是Ruby和Rails新手,现在使用的是Rails 3.2.12。我读了《雄辩的ruby》一书,就这个问题搜索了stackoverflow,并在PracticalStudio.com上观看了ruby课程视频。在那个视频课程中,他们创建了这样一个类: class User < ActiveRecord::Base attr_accessible :name, :email, :password, :
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
在SessionController中,上面1行
sign_in user
返回的错误是:“SessionController的未定义方法'w00t'
我还尝试在会话助手中编写一个方法:
def woot(template)
template.counter += 1
end
然后我重新排列了SessionController“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
有了这个,我没有得到任何错误,但计数器仍然没有改变。我比以前更困惑了。请告诉我将该方法放置在何处,或者如何修复我的应用程序“我丢失了”的此问题。您的计数器没有增加,因为它没有被持久化到数据库中。您使用的实例变量仅对当前请求有效。一旦重定向并重新加载页面,垃圾收集器就会丢失该对象以及计数器 要使计数器持久化,您需要在user上创建一个新列来保存计数器,然后可以使用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
#创建迁移
rails g迁移将\u sign\u in\u count\u添加到\u用户sign\u in\u count:integer
rake数据库:迁移
#然后增加
类用户
你应该去上课!非常感谢你的回答。
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
# 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