validates_each user_id & question_id останавливает сбор user_id, но не создание записи - PullRequest
0 голосов
/ 20 мая 2010

Я пытаюсь ограничить пользователя моего приложения голосованием (по вкусу в данном случае) ответом на вопрос определенное количество раз.Я успешно остановил коллекцию user_id, но запись продолжает создаваться.Мне нужно, чтобы проверка фактически блокировала создание записи в таблице лайков.

альтернативный текст http://gadocidesign.squarespace.com/storage/Screen%20shot%202010-05-20%20at%2010.07.19%20AM.png

Как видно, два последних голоса теряют идентификатор пользователя, но все еще создаются.Код ниже покажет вам, как я это делаю.Я пытаюсь ограничить голосование пользователей не более 10 раз за любой ответ на вопрос.

Как модель (я избавляю вас от обратных связей has_many, но они есть).

class Like < ActiveRecord::Base
  belongs_to :site
  belongs_to :user
  belongs_to :question


    validates_each :user_id do |row, attr, value|
      m.errors.add :user_id, 'Too many likes' unless row.like_count < 10
    end

    def like_count
      Like.count(:conditions => {:user_id => user_id, :question_id => question_id})
    end
  end

LikesController # create

class LikesController < ApplicationController

  def create
    @user = current_user
    @site = Site.find(params[:site_id])
    @like = @site.likes.create!(params[:like])
    @like.user = current_user
    @like.save

    respond_to do |format|
     format.html { redirect_to @site}
     format.js
     end
  end
end

1 Ответ

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

Вы говорите, чтобы делать именно то, что вы видите.

# This is what creates the record you're seeing in your db.
@like = @site.likes.create!(params[:like])

# And now you try to assign the user.
@like.user = current_user
@like.save

Попробуйте что-то вроде этого:

@like = @site.likes.create!(params[:like].merge(:user_id => @user.id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...