我有一个选民模型加入的用户和问题.用户可以对问题进行投票.他们可以向上或向下投票(在选民模型中记录).首先,我希望能够阻止用户在一个方向上投票.其次,我想让用户投反对票.因此,如果他们投了票,他们仍然可以投票,这将取代上行投票.用户永远不能对问题进行两次投票.这是我的文件:
class Issue < ActiveRecord::Base
has_many :associations, :dependent => :destroy
has_many :users, :through => :associations
has_many :voterships, :dependent => :destroy
has_many :users, :through => :voterships
belongs_to :app
STATUS = ['Open', 'Closed']
validates :subject, :presence => true,
:length => { :maximum => 50 }
validates :description, :presence => true,
:length => { :maximum => 200 }
validates :type, :presence => true
validates :status, :presence => true
def cast_vote_up!(user_id, direction)
voterships.create!(:issue_id => self.id, :user_id => user_id,
:direction => direction)
end
end
class Votership < ActiveRecord::Base
belongs_to :user
belongs_to :issue
end
class VotershipsController < ApplicationController
def create
session[:return_to] = request.referrer
@issue = Issue.find(params[:votership][:issue_id])
@issue.cast_vote_up!(current_user.id, "up")
redirect_to session[:return_to]
end
end
class User < ActiveRecord::Base
authenticates_with_sorcery!
attr_accessible :email, :password, :password_confirmation
validates_confirmation_of :password
validates_presence_of :password, :on => :create
validates_presence_of :email
validates_uniqueness_of :email
has_many :associations, :dependent => :destroy
has_many :issues, :through => :associations
has_many :voterships, :dependent => :destroy
has_many :issues, :through => :voterships
end
Run Code Online (Sandbox Code Playgroud)
jef*_*unt 11
您可以将唯一性约束放在Votership模型上.您无需在关联本身上进行验证.
class Votership < ActiveRecord::Base
belongs_to :user
belongs_to :issue
validates :issue_id, :uniqueness => {:scope=>:user_id}
end
Run Code Online (Sandbox Code Playgroud)
这意味着用户只能对给定的问题(向上或向下)进行一次投票.
| 归档时间: |
|
| 查看次数: |
5522 次 |
| 最近记录: |