Определите, если количество связанных моделей> 0 - PullRequest
0 голосов
/ 24 мая 2010

У меня есть модель под названием Stem. Мне нужна функция 'thumbs up', поэтому я создал вторую модель под названием Thumb, которая состоит из stem_id и user_id.

Я также использую плагин restful аутентификации для учетных данных пользователя.

У меня работает кнопка 'thumbs up', которая добавляет строку в таблицу thumbs, но я бы хотел проверить, не выполнил ли уже вошедший в систему пользователь большие пальцы на эту стебель.

Я пытался добавить это к Stem модели:

def thumbed
    Thumb.count_by_sql ["SELECT COUNT(*) FROM thumbs WHERE user_id = ? AND stem_id = ?", current_user.id, self.id ]
end

Проблема здесь в том, что модель stem не имеет доступа к переменной current_user, которую имеют контроллеры.

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 мая 2010

Ваш контроллер знает current_user, а ваша Stem модель, вероятно, не должна. Однако вы можете очистить свой код и избежать жесткого подключения SQL с помощью named_scope и передать в него пользователя.

#thumb.rb
named_scope :for_user_id, lambda {|id| {:conditions => {:user_id => id}}}

#stem.rb
def thumbed_by_user(user)
  self.thumbs.for_user_id(user.id).count > 0
end


# some controller
stem = some_method_that_gets_a_stem
is_already_thumbed = stem.thumbed_by_user(current_user)
0 голосов
/ 24 мая 2010

То, что в итоге сработало для меня, было примерно таким:

Я добавил эти методы в свою модель ствола:

def thumbed_by? usr_id
  Thumb.count(:conditions => {:user_id => usr_id, :stem_id => self.id}) > 0
end

def owned_by? usr_id
  self.id == usr_id
end

Я также добавил это:

attr_accessor :thumbed, owned

Затем в своем шоу-действии, где это было необходимо, я добавил следующие строки:

@stem.thumbed = @stem.thumbed_by? current_user.id
@stem.owned = @stem.owned_by? current_user.id

Это работает именно так, как я хотел (приложение Flex уже интерпретирует его как должное), но есть лиКак я мог сократить это?

0 голосов
/ 24 мая 2010

Можете ли вы передать текущего пользователя на thumbed? Откуда ты звонишь?

Кстати, вы можете попытаться упростить все это, используя ассоциации. Я не уверен на 100%, что понимаю, что вы пытаетесь сделать, но, похоже, у вас есть следующее ...

class Stem
  has_many :thumbs
end

class User
  has_many :thumbs
end

class Thumb
  belongs_to :user
  belongs_to :stem
end

Тогда вы можете использовать поиск, хотя ассоциации, чтобы достичь ваших целей, не прибегая к прямому SQL. Проверьте это RailsCast: http://railscasts.com/episodes/3-find-through-association

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