Динамическая область для доступа к атрибутам модели - PullRequest
0 голосов
/ 02 июня 2011

В настоящее время я использую защиту массовых назначений, встроенную в рельсы 3, чтобы определить, какой уровень пользователей может обновлять свою модель.Например, этот код позволяет мне защищать атрибуты на основе уровня пользователя.

  class Customer
    attr_accessor :name, :credit_rating

    attr_accessible :name
    attr_accessible :name, :credit_rating, :as => :admin
  end

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

Customer.all.as(:admin) 

и вернуть кредитный рейтинг.Сравните это с выполнением

Customer.all

и получением всех атрибутов, кроме credit_rating

Это то, что поддерживает rails, и я пропустил?

1 Ответ

1 голос
/ 02 июня 2011

attr_accessible используется для фильтрации входящих атрибутов при массовом назначении. Это удобный метод, созданный таким образом, что разработчику не нужно вручную очищать входящий хэш параметров, который он не контролирует.

При отображении информации разработчик полностью контролирует то, что он / она хочет показать, поэтому нет причин ограничивать функциональность чтения.

Однако, rails позволяет вам «выбирать» нужные атрибуты в запросе: см. http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

Вы можете легко создать область с именем admin, которая будет ограничивать выбранные значения.

Если вы не хотите иметь полные модели, а только значения, вы можете использовать сгенерированный sql. е:. г

ActiveRecord::Base.connection.select_values(Customer.select('name').to_sql)
...