Rail按user_id范围划分模型数据的范围



我有一个 Rails 应用程序,用户在其中输入,我在会话中有user_id。下一步是为向用户显示的所有模型数据创建一个范围,其中data.user_id = session[:user_id]

我知道我可以在每个控制器中执行以下操作

Controller.find_all_by_user_id(session[:user_id])

然而,对我来说,似乎有一个更好的解决方案。我发现了向模型添加范围的可能性,但此处不知道会话,并且 MVC 模式明智地将其放在那里可能不是一个好主意。有没有解决方案将这种user_id限制应用于来自模型的所有数据,或者我应该只对包含用户数据的每个控制器函数使用find_all_by_user_id

如果我

理解正确,您希望通过user_id访问一些数据。这意味着您可以在用户模型中将关系定义为has_many :this_and_that或类似的东西。这是正确的,然后您可以在应用程序控制器中创建一个before_filter甚至更好的函数,您可以在其中获取当前用户实例。通过此实例,您可以访问该用户的所有可用数据。您甚至可以将该函数设置为帮助程序函数,并且可以在视图中使用它。

#User.erb
has_many :other_data
#ApplicationConroller.erb
def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end
#OtherControllers
def index
  @other_datas = current_user.other_datas
end

你可以有before_filter :load_user_data, :if => current_user或类似的东西。方法将如下所示:

def load_user_data  
 @data = ModelName.where(user_id: session[:user_id]) 
end

@data将是ActiveRecord::Relation的,并且可以链接。如果您真的需要,在每个控制器中使用find_all_by_user_id也不错。

最新更新