Как я могу проверить, был ли «Отзыв» уже написан данным @current_user? - PullRequest
0 голосов
/ 28 апреля 2009

Для моей модели Vendor:

:has_many Review

И каждый пользователь:

:has_many Review

И каждый отзыв:

:belongs_to Vendor
:belongs_to User

Итак. Я не являюсь одним пользователем, чтобы иметь возможность писать более одного отзыва, поэтому я хочу проверить URL-адрес vendors /: vendorId, который является действием «show», и у меня есть возможность сделать «Write Review» кнопка исчезнет или появится в зависимости от того, написано ли для @current_user обзор для этого конкретного поставщика.

Я знаю @ vendor.id и @ loggedin_user.id, но не знаю, как выполнить поиск по двум параметрам.

1 Ответ

4 голосов
/ 28 апреля 2009

Есть много способов сделать это. Если вы просто хотите найти по двум параметрам, вы можете сделать:

Review.find(:first, :conditions => {:user_id => @user.id, :vendor_id => @vendor.id})

Вы также можете использовать ассоциации, например:

@current_user.reviews.find(:first, :conditions => {:vendor => @vendor})

Именованный_обзор был бы другим способом:

class Review < ActiveRecord::Base
  named_scope :for_vendor, lambda {|vendor| 
    {:conditions => {:vendor => vendor}}
  }
  belongs_to :vendor
  belongs_to :user
end

@current_user.reviews.for_vendor(@vendor).empty?

Поскольку это бизнес-правило, я рекомендую инкапсулировать эту логику в методе для пользователя или поставщика, например:

def can_review?(vendor)
  self.reviews.find(:first, :conditions => {:vendor => @vendor}).nil?
end

Затем вы можете сделать, в представлении:

<%= review_vendor_button if @current_user.can_review?(@vendor) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...