1

コントローラ内のcurrent_userに関する属性にアクセスしようとしています。

class MatchfinderController < ApplicationController

  def c(value, t_array)
    t_array.min{|a,b|  (value-a).abs <=> (value-b).abs }
  end

  def show 
    peeps = User.find(:all, :conditions => ["id != ?", current_user.id])
    user_a = []

    peeps.each do |user|  
      user_a.push user.rating    
    end

    closest_rating = c(current_user.rating, user_a)

    @opponent = User.find(:all, :conditions => ["id != ? AND rating = ? ", current_user.id, closest_rating])
  end
end

current_userはビューで正常に機能していますが、コントローラーでnilを返します。

これが私のSessionsHelperです。

module SessionsHelper

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end

  def signed_in?
    !current_user.nil?
  end
end

SessionsHelperはApplicationControllerに含まれています

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
end

これが私のSessionsControllerです

class SessionsController < ApplicationController
  def new
  end

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

  def destroy
    cookies[:remember_token] = nil
    redirect_to root_url, notice: "Logged out!"
  end
end
4

2 に答える 2

2

コードをアプリケーションコントローラーに配置しhelper_method、このようにマークを付けて、そのメソッドを両方で使用できるようにしますhelpercontroller

helper_method :current_user

def current_user=(user)
  @current_user = user
end
于 2012-09-21T05:00:52.427 に答える
0

ヘルパーはビューでしか利用できないと思います。これをコントローラーの上部近くに配置してみてください。

include SessionsHelper

于 2012-09-21T04:02:58.967 に答える