Как я могу ограничить количество записей (обзоров), добавленных пользователем? - PullRequest
0 голосов
/ 04 апреля 2011

Как можно ограничить количество отзывов, которые пользователь может написать для места проведения, одним?

Мне также хотелось бы, чтобы в случае повторной проверки места встречи мне было бы предложено всплывающее сообщение.

Я не очень уверен, какой код мне следует включить в мой вопрос, но вот метод создания отзыва:

Просмотр контроллера

def create
  @review = current_user.reviews.create!(params[:review])
  @review.venue = @venue
  if @review.save
    flash[:notice] = 'Thank you for reviewing this venue!'
    respond_to do |format|
      format.html { redirect_to venue_path(@venue) }
      format.js
    end
  else
    render :action => :new
  end
end

Спасибо за любую помощь, она очень ценится!

edit

Я добавил этот вспомогательный метод в контроллер мест:

  def reviewed?
    if current_user.reviews.for_venue(@venue).empty?
      true
    else
      false
    end
  end

и обернул свою форму в:

<% if reviewed? %>
  form
<% end %>

, но это просто возвращает неопределенный метод `reviews 'для VenuesController

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Было бы лучше, если бы вы могли запретить пользователю просматривать место в первую очередь.По вашему мнению (или создайте помощника) выполните проверку, если место уже было просмотрено пользователем (много способов сделать это).Если это так, не показывайте форму обзора.Легко.Если вы симпатичный OC, тогда вы проверяете контроллер.

1 голос
/ 04 апреля 2011

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

current_user.reviews.create!({:venue_id => @venue.id}.merge(params[:review]))

И для проверки используйте что-то вроде этого:

before_validation :check_if_already_reviewed

def check_if_already_reviewed
  if (check if already reviewed)
    return false
  else
    return true
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...