2010-05-24 2 views
0

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

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

У меня есть кнопка «Пальцы вверх», которая добавляет строку в таблицу 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.

Спасибо!

ответ

0

Можете ли вы передать текущего пользователя 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

+0

Да, у меня есть ассоциации, подобные тем, которые были настроены, я мог бы перейти от sql к чему-то еще, если у меня есть идентификатор текущего пользователя. Я не могу использовать какие-либо аргументы для большого пальца, потому что я надеюсь, что мое приложение Flex прочитает его как свойство, когда я передам данные через RubyAMF – Lowgain

+0

Хммм. Наверное, я ничего не могу поделать, потому что никогда не использовал RubyAMF.Возможно, вы можете вызвать действие в своем thumbs_controller из своего приложения flex, и это может проверить user_id? Я думаю, что основная проблема здесь заключается в том, что вы пытаетесь что-то сделать на уровне модели, когда она может принадлежать контроллеру. И из того, что я вижу, RubyAMF предназначен для подключения к слою контроллера. – Greg

+0

Да, я думаю, мне просто нужно добавить еще пару шагов в процесс и поместить его в контроллер – Lowgain

1

Ваш контроллер знает 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

Что в конечном итоге работает для меня первым было что-то вроде этого:

Я добавил эти методы к моей стволовой модели:

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 уже интерпретирует его как должным образом), но есть ли способ сократить это?

Смежные вопросы