Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用ruby on rails为用户登录创建计数方法_Ruby On Rails_Ruby_Session_Login_Counter - Fatal编程技术网

Ruby on rails 使用ruby on rails为用户登录创建计数方法

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, :

我想要的是:一个用户登录到他的帐户,他会自动更新自己的计数器(@counter+=1)

我是Ruby和Rails新手,现在使用的是Rails 3.2.12。我读了《雄辩的ruby》一书,就这个问题搜索了stackoverflow,并在PracticalStudio.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 
在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