繁体   English   中英

Controller中的辅助方法

[英]Helper methods in Controller

我有一个辅助模块:

module SessionsHelper
  @current_user
  @current_session

  def current_user
    @current_user = User.find(cookies[:user_id]) if(cookies[:user_id])
  end

  def current_session
    @current_session = Session.find_by_secret_key(cookies[:session_secret_key])
  end

  def current_user=(user)
    @current_user = user
  end

  def current_session=(session)
    @current_session = session
  end
end

和一个控制器:

class SessionsController < ApplicationController
  include SessionsHelper
  respond_to :json

  def create
    u = User.find_by_ip(request.remote_ip)
    u = User.create({:ip => request.remote_ip}) unless u

    s = Session.create
    s.admin = u
    s.save!

    send(:current_user=,u)
    send(:current_session=,s)

    respond_with s
  end
end

注意,我必须使用:send方法设置当前用户,因为直接在控制器中调用current_user=u不会这样做。

我猜你在用设计。 我在这里没有看到任何问题,但是也许您想要做的是将以下内容放入应用程序控制器中:

before_filter :load_current_user

def load_current_user
  @current_user = User.find(session[:user_id]) if(session[:user_id])
end

然后,在所有控制器中都可以访问@current_user。

直接调用current_user应该可以,但是您需要使用self显接收器

def create
  u = User.find_by_ip(request.remote_ip)
  u = User.create({:ip => request.remote_ip}) unless u

  s = Session.create
  s.admin = u
  s.save!

  self.current_user = u
  self.current_session = s

  respond_with s
end

否则,以下代码将设置本地方法变量

def create
  u = User.find_by_ip(request.remote_ip)
  u = User.create({:ip => request.remote_ip}) unless u

  s = Session.create
  s.admin = u
  s.save!

  current_user = u
  current_session = s

  respond_with s
end

附带说明,您可能要使用有意义的变量名。

def create
  user = User.find_by_ip(request.remote_ip) || User.create(:ip => request.remote_ip)

  session = Session.create
  session.admin = user
  session.save!

  self.current_user = user
  self.current_session = session

  respond_with session
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM