如何validationhas_many的唯一性:通过连接模型?
我有一个选民模型加入的用户和问题。 用户可以对问题进行投票。 他们可以向上或向下投票(在选民模型中记录)。 首先,我希望能够阻止用户在一个方向上投票。 其次,我想允许用户投反对票。 所以,如果他们投了票,他们仍然可以投票放弃,这将取代上行投票。 用户永远不能对问题进行两次投票。 这是我的文件:
class Issue :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 :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
您可以将唯一性约束放在Votership
模型上。 您不需要在关联本身上放置validation。
class Votership < ActiveRecord::Base belongs_to :user belongs_to :issue validates :issue_id, :uniqueness => {:scope=>:user_id} end
这意味着用户只能对给定的问题(向上或向下)进行一次投票。
关系模型:
class Person has_many :accounts has_many :computers, through: :accounts end class Account belongs_to :person belongs_to :computer scope :administrators, -> { where(role: 'administrator') } end class Computer has_many :accounts has_many :people, through: :accounts end
这就是它的名称
person.accounts.administrators.map(&:computer)
我们可以使用ActiveRecord :: SpawnMethods#merge更好地做到这一点!
person.computers.merge(Account.administrators)
参考: https : //coderwall.com/p/9xk6ra/rails-filter-using-join-model-on-has_many-through
- Rails has_and_belongs_to_many如何更改默认iforeign键并在csv上显示结果列表
- Gem Load Error是:未定义的方法`type_cast_from_database’用于类`ArJdbc :: MSSQL :: UUIDType’
- Rails在一些标签助手中传递额外的参数
- Rails facebook app返回422“你想要的改变被拒绝”错误
- 如何在Rails中创建一个字段?
- 在Rails中使用模型数据填充选择
- 访问lib目录中的模块(Ruby on rails)
- send_data – 在新的浏览器窗口中打开文件?
- rails script / server无法启动服务器