2010-05-20 1 views
0

내 질문에 대한 대답을 투표에 회부하도록 (이 경우) 특정 횟수만큼 내 응용 프로그램의 사용자를 제한하려고합니다. 나는 성공적으로 user_id 컬렉션을 멈추고 있지만 레코드는 계속 생성됩니다. 실제로 likes 테이블에서 레코드 만들기를 차단하는 유효성 검사가 필요합니다.validates_each user_id & question_id는 user_id의 수집을 중지하지만 기록을 만들지 않습니다.

alt text http://gadocidesign.squarespace.com/storage/Screen%20shot%202010-05-20%20at%2010.07.19%20AM.png

마지막 두 개의 표가 USER_ID을 잃게하지만 여전히 만들어 볼 수 있듯이. 아래 코드는 내가 이것을 어떻게하는지 보여준다. 나는 어떤 질문에 대해서도 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 번호 당신은 당신이 보는 정확히 무엇을하라는거야

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 

답변

0

을 만들 수 있습니다.

# 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)) 
+0

완벽한합니다. 그 병합 기능을 사용하는 방법을 잘 모르겠습니다. – bgadoci

관련 문제