Запрашивает связанные классы

#jquery #ruby-on-rails #ruby-on-rails-3 #model

#jquery #ruby-on-rails #ruby-on-rails-3 #Модель

Вопрос:

Если у меня есть класс с именем Group, и в этом классе у меня есть has_many:users

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

Итак, я думаю, мой первый вопрос был бы таким: могу ли я вызвать этот current_user из модели, или мне нужно передать его методу?

Мой второй вопрос заключается в том, что я должен быть в состоянии сделать что-то вроде следующего?

   def has_access?
    !current_user.nil amp;amp; users.where(:id == current_user.id).count(:id) > 0
  end
  

Ответ №1:

Вы не можете вызвать current_user в моделях — это доступно только в рамках контроллеров и представлений.

Это означает, что ваш метод будет выглядеть немного по-другому — возможно, попробуйте следующее:

 def has_access?(user)
  user.present? amp;amp; users.where(:id => user.id).any?
end
  

Ответ №2:

current_user является вспомогательным, поэтому вы не можете получить к нему доступ из модели и должны передать его в качестве аргумента методу, как вы сказали.

Что касается вашего второго вопроса, можете ли вы сказать мне, в каком классе это определено? Насколько я понимаю, это, похоже, содержится в определении групповой модели, поскольку вы используете «пользователи», которые, я полагаю, являются ассоциацией has_many. Если это так, ответ, очевидно, отрицательный, поскольку «current_user» здесь неизвестен.