0

filemaker データベース (ginjo-rfm gem を使用) に基づいて、単純なユーザー認証をアプリケーションに含めようとしています。Ryan Bates のAuthentication from Scratchからいくつかのアイデアを得た後、カスタマイズしたバージョンを作成しましたが、いくつかの問題が発生しました。

ログインフォームを送信すると、

User:Class の未定義メソッド `find_by_username'

find_by_username メソッドは、'username' というデータベースの列に基づいている必要がありますね。

ユーザー.rb

class User < Rfm::Base
  include ActiveModel::SecurePassword
  include ActiveModel::MassAssignmentSecurity
  include ActiveModel::SecurePassword
  has_secure_password
  attr_accessible :username, :password

   config :layout => 'web__SupplierContacts'

  def self.authenticate(username, password)
    user = find_by_username(username)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user
    else
      nil
    end
  end  

end

sessions_controller.rb

class SessionsController < ApplicationController
 def new
 end

 def create
   user = User.authenticate(params[:username], params[:password])
      if user && user.authenticate(params[:password])
     session[:user_id] = user.id
     redirect_to root_url, notice: "Logged in!"
   else
     flash.now.alert = "Email or password is invalid"
     render "new"
   end
 end

 def destroy
   session[:user_id] = nil
   redirect_to root_url, notice: "Logged out!"
 end
end

これは私のモデルが Rfm::Base から継承しているためだと思いますが、よくわかりません。何か案は?

アイデア:Class.find_by_columnステートメント を言い換える方法はありますか? 私もできませんUser.where(:username => "username usernamerson"( を返しますundefined method 'where' for User:Class)。

4

1 に答える 1