Использование default_scope в модели для фильтрации по правильному instanceID - PullRequest
1 голос
/ 08 сентября 2010

У меня есть две таблицы:

книги (id, name, desc, instance_id) экземпляры (id, домен)

Пользователь должен иметь возможность ТОЛЬКО видеть данные, которые назначены его instance_id в записях ...

Для книг, модель, чтобы достичь этого, я подумываю об использовании области по умолчанию.

class Books < ActiveRecord::Base
    attr_accessible :name, :description
    belongs_to :user
    default_scope :order => 'books.created_at DESC'
        AND books.instance_id == current.user.instance_id 
end

Есть мысли по поводу этой идеи? Кроме того, как я могу написать эту вторую строку для Rails 3? 'AND books.instance_id == current.user.instance_id'

Спасибо

1 Ответ

0 голосов
/ 08 сентября 2010

Не очень хорошая идея получить доступ к текущему пользователю внутри модели. Я бы реализовал это следующим образом:

class Instance < ActiveRecord::Base
  has_many :users
  has_many :books
end

class User < ActiveRecord::Base
  belongs_to :instance
  has_many :books, :order => "created_at DESC"
  has_many :instance_books, :through => :instance, :source => :books,
                   :order => "created_at DESC"
end

class Book < ActiveRecord::Base
  belongs_to  :user
  belongs_to  :instance
end

Список книг, связанных с экземпляром пользователя:

current_user.instance_books

Список созданных пользователем книг:

current_user.books

Создание новой книги:

current_user.books.create(:instance => current_user.instance, ..)

Примечание:

Ваш синтаксис создания книги неверен. Метод build принимает хеш в качестве параметра. Вы передаете два аргумента вместо одного.

user.books.build(params[:book].merge(:instance => current_user.instance}))

OR

user.books.build(params[:book].merge(:instance_id => current_user.instance_id}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...