【发布时间】:2013-12-04 22:21:28
【问题描述】:
我已经设置了@user_ctypes,但是,当我从模型访问它时,我得到了一个 Nil 值。为什么?
这是一个电视指南,用户 (current_user) 将设置要隐藏的频道。 例如: 如果登录的用户没有卫星,他将拥有 ctypes=['sat']。因此,在卫星上播出的任何频道都将对用户隐藏。 如果用户未登录,则 current_user 为 nil。
我想使用“default_scope”,因为对 DB 的任何查询都应该注意用户想要查看的频道。
应用控制器
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :set_user_ctypes
private
def set_user_ctypes
unless current_user.nil?
@user_ctypes = current_user.ctypes
else
@user_ctypes = Array.new
end
end
型号
class Channel < ActiveRecord::Base
has_many :programs, :dependent => :delete_all
validates :name, :site, :ctype, :country, :presence => true
default_scope {where.not(ctype: @user_ctypes)}
用户(设计者)
class User < ActiveRecord::Base
【问题讨论】:
-
您无法访问模型中的实例变量...
-
渠道和用户之间有什么关系吗?
-
我建议不要使用
unless/else,而是更改代码以便您可以使用if/else。它将提高代码的可读性。 -
@MichaelStalker 好的,谢谢。
-
@JasdeepSingh 不,没有关系
标签: ruby-on-rails ruby ruby-on-rails-4