update_attribute,错误未定义方法`update_attribute'用于#<class

时间:2017-01-20 04:50:38

标签: ruby-on-rails strong-parameters update-attribute

=“”

本书下面的特定代码使用Rails 4 我相信rails 5需要强大的参数,可能会导致Rails 5出错。 请有人可以分享我。如何申请许可证并要求以下代码)

来自model user.rb

HANDLE*

错误(在第5栏中)

HANDLE* phMpq

这就是我的所作所为。

def remember
    remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
end

错误:

NoMethodError in SessionsController#create
undefined method `update_attribute' for #<Class

Tobe clear:从sessionshelper.erb调用的那些方法

def remember
    remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(params:[remember_token]))
end

user.rb

NoMethodError in SessionsController#create
undefined method `update_attribute' for #<Class:0x007fd23b30a790> Did you mean? _default_attributes

sessionscontroller.rb

module SessionsHelper

  # Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end

  # Remembers a user in a persistent session.
  def remember(user)
    User.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end


    # Returns the user corresponding to the remember token cookie.
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end


  # Returns true if the user is logged in, false otherwise.
  def logged_in?
    !current_user.nil?
  end

# Forgets a persistent session.
  def forget(user)
    user.forget
    cookies.delete(:user_id)
    cookies.delete(:remember_token)
  end
  # Logs out the current user.
  def log_out
    forget(current_user)
    session.delete(:user_id)
    @current_user = nil
  end
end

Eooro

6 个答案:

答案 0 :(得分:0)

我有一个类似的实现,也许这可能会帮助你

user.rb

中的

  def create_confimation_token
    generate_token(:confirmation_token)
    update_attribute(:expiration,Time.zone.now + 2.days)
    save!  
  end

  def generate_token(column)
      begin
        self[column] = SecureRandom.urlsafe_base64
      end 
  end   

答案 1 :(得分:0)

问题出在帮助,行

您正在使用remember类调用User方法,因此它显示undefined method for class。而是使用user object

进行通话

User.remember

应该是,

<强> user.remember

def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
end

答案 2 :(得分:0)

您应该在update_attribute上致电user 尝试

current_user.update_attribute(a: b)

SessionsController#create

答案 3 :(得分:0)

update_attributes是一个实例方法而不是类方法,所以首先需要在User类的实例上调用它。

像:

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"myColor"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
[self.txtMobNo.layer setBorderColor:[color CGColor]];

尝试一次。

答案 4 :(得分:0)

你应该为用户对象调用update_attributes。

helper.rb

  def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end

model.rb

  def remember
    remember_token = new_token
    self.update_attributes(:remember_digest, digest(remember_token))
  end

答案 5 :(得分:0)

现在有效

发生了什么

  1. class&lt;&lt; self in user.rb
  2. 导致以下方法无效。

    13
    1. SessionsHelper中的User.remember应为

      14

    2. 谢谢大家