Вопрос по ruby-on-rails-3, session, ruby-on-rails – Отфильтрованные по владельцу объекты модели в Rails 3

1

Мне нужно сделать некоторую фильтрацию на моих моделях ActiveRecord, я хочу отфильтровать все мои объекты модели по owner_id. Что мне нужно, так это в основном default_scope для ActiveRecord.

Но мне нужно отфильтровать по переменной сеанса, которая не доступна из модели. Я прочиталнекоторые решения, но ничего не работает, в основном, любой из них говорит, что вы можете использовать сессию при объявлении default_scope.

Это моя декларация по объему:

class MyModel < ActiveRecord::Base
    default_scope { where(:owner_id => session[:user_id]) }
    ...
end

Просто, правда? Но это не говорит о том, чтоmethod session does not exists.

Надеюсь, вы можете помочь

Error: User Rate Limit Exceeded Rubén T.F.
Error: User Rate Limit Exceeded John Plummer

Ваш Ответ

3   ответа
0

# my_model_controller.rb
before_filter :retrieve_owner_my_models, only => [:index] # action names which need this filtered retrieval

def retrieve_owner_my_models
   @my_models ||=  MyModel.where(:owner_id => session[:user_id])
end

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Rubén T.F.
0

class ApplicationController
  ...
  def my_models
    Model.where(:owner_id => session[:user_id])
  end
  ...

  # Optional, for usage within your views:
  helper_method :my_models
end

3

Useraround_filterApplicationController

class User < ActiveRecord::Base

    #same as below, but not thread safe
    cattr_accessible :current_id

    #OR

    #this is thread safe
    def self.current_id=(id)
      Thread.current[:client_id] = id
    end

    def self.current_id
      Thread.current[:client_id]
    end  

end

ApplicationController

class ApplicationController < ActionController::Base
    around_filter :scope_current_user  

    def :scope_current_user
        User.current_id = current_user.id
    yield
    ensure
        #avoids issues when an exception is raised, to clear the current_id
        User.current_id = nil       
    end
end

MyModel

default_scope where( owner_id: User.current_id ) #notice you access the current_id as a class attribute
Error: User Rate Limit Exceeded Rubén T.F.
Error: User Rate Limit Exceededstackoverflow.com/questions/7896298/…Error: User Rate Limit Exceededclient_idError: User Rate Limit ExceededUserError: User Rate Limit Exceededdefault_scope
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы