реализация with_scope с информацией из сессии - PullRequest
1 голос
/ 23 октября 2011

В моих различных контроллерах при различных вызовах поиска я навязываю 1 конкретное условие:

data_owner_id = @current_user.data_owner_id 

как

  1. Я хочу быть СУХИМ и
  2. Я не хочу рисковать, забывая добавить это ко всем находкам во всех контроллерах

Так что я хотел бы реализовать какую-то глобальную область видимости с информацией, которая поступает из контроллера.«область действия» не может использоваться в моделях, так как (из railsdoc)

области, определенные с областью действия, будут оцениваться при их определении, а не при использовании

и @current_user не определен в этой точке.

Кто-нибудь может подсказать какие-либо СУЩЕСТВЕННЫЕ способы справиться с этим?

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Если я правильно понимаю ваш вопрос, вы могли бы сделать что-то вроде этого

есть фильтр до в вашем контроллере

Пример:

Контроллер

class PostsController < ApplicationController
  before_filter :owner_id


  def owner_id
    @data_owner_id = @current_user.data_owner_id
  end
end

Таким образом, вы можете убедиться, что все ваши методы контроллера имеют переменную @data_owner_id Тогда вы можете иметь область видимости, указанную @nkm

НТН

Самера

0 голосов
/ 23 октября 2011

Здесь мы можем использовать область видимости модели, например: если существует модель Post, которая имеет атрибут owner_id,

class Post < ActiveRecord::Base    
   scope :owned, :lambda{|id| where("owner_id = #{id}")}
end

и в контроллере,

Post.owned(@current_user.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...