如何验证 has_many :through 连接模型的唯一性?

2024-04-12

我有通过投票模型加入的用户和问题。用户可以对问题进行投票。他们可以投票赞成或反对(这记录在投票模型中)。首先,我希望能够阻止用户向一个方向投多次票。其次,我想让用户投反对票。因此,如果他们投了赞成票,他们仍然应该能够投反对票,这将取代赞成票。用户永远不能对一个问题进行两次投票。这是我的文件:

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

您可以将唯一性约束放在Votership模型。您不需要对关联本身进行验证。

class Votership < ActiveRecord::Base
  belongs_to :user
  belongs_to :issue

  validates :issue_id, :uniqueness => {:scope=>:user_id}
end

这意味着用户只能对给定问题进行单次投票(赞成或反对)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 has_many :through 连接模型的唯一性? 的相关文章

  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 我想要一个默认选择空白值的日期选择框

    我用了以下date select助手 但没有一个显示默认情况下选择空白值的日期选择框 通过以下所有代码 我得到了选择框 但选择了当前日期 我在 Rails 2 3 2 上
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而
  • 将查询字符串参数作为表单发布的一部分发送

    有没有办法捕获查询字符串并将其作为表单帖子的一部分发送 我正在使用 Rails 2 3 5 我的用户所在的页面有多个查询字符串参数 在此页面上 他们将提交一份表格 在接收帖子的操作中 我想知道这些查询字符串参数是什么 显然 它们不是作为邮件
  • 如何配置database.yml以部署到Heroku

    我最近升级到了最新版本的Rails 并且不明白如何将应用程序部署到Heroku 这是我的database yml file default default adapter postgresql pool 5 timeout 5000 dev
  • Travis-CI 上的 Rails 数据库设置

    我正在尝试在 Rails 项目上使用 Travis 持续集成 文档说 对于 SQLite3 测试数据库必须配置如下 test adapter sqlite3 database memory timeout 500 但我想保留本地测试的默认配
  • 如何准确地衡量加载模型所需的时间?

    我想对加载模块 find by id 234 调用 所需的时间进行基准测试 另外 我如何跟踪加载页面所需的时间 我知道我在运行 Rails 服务器时得到此信息 但这是在调试模式下 我想要生产速度基准 可能吗 为了快速检查 我强烈建议检查基准
  • Ruby on Rails 两个同时创建两个不同控制器的操作

    我有一个线程控制器和消息控制器 线程 has many 消息 用户单击发送后 我将数据发送到线程控制器以创建线程 我想做到这一点 线程控制器 rb def create if thread save send data into messa
  • 如何在实际作业中引用活动的delayed_job

    我正在研究一个解决方案来显示延迟作业的完成百分比 使用delayed job gem 目前 我的delayed jobs 表的数据库迁移如下所示 class CreateDelayedJobs lt ActiveRecord Migrati
  • Rails 的多个数据库不适用于远程数据库

    我有一个远程只读 postgres 数据库 它是通过 docker 实例维护的卡尔达诺数据库同步 https github com input output hk cardano db sync 我设法将开发数据库连接到它 它工作正常 但由
  • 将对象转换为哈希,然后将其保存到用户的列

    找不到任何接近我想做的事情 我想将一个对象存储到用户的列中 该列采用数组的形式 postgres def change add column users interest string array true default end 我有另一
  • 如何在 Rails 中获取“应用程序跟踪”而不是完整的详细回溯?

    在开发环境的Rails默认错误页面中 您可以查看三个回溯 1 Application Trace 2 Framework Trace和3 Full Trace 但是如何在 Rails 控制器中获取 应用程序跟踪 完整跟踪 exception
  • 回形针/乘客 NotIdentifiedByImageMagickError:

    当我尝试上传照片时红宝石 on Rails http en wikipedia org wiki Ruby on Rails using 回形针 http github com thoughtbot paperclip在我的本地机器上它运行
  • 文件位置 Rails 7 中的 Javascript 与样式表

    在使用导入映射功能的新默认 Rails 7 应用程序中 Javascript 存储在app javascript 而 CSS 位于app assets stylesheets 它们不仅位于不同的层次结构级别 而且javascript是奇异的
  • has_many 关系中的 Active Record 对象何时保存?

    我正在使用 Rails 1 2 3 是的 我知道 并且对如何使用感到困惑has many适用于对象持久性 为了举例 我将使用它作为我的声明 class User lt ActiveRecord Base has many assignmen
  • Rails autoload_paths 中的错误?

    我的代码中遇到一个奇怪的错误 我有一个 Rails 应用程序 库中有以下两个文件 lib module one module two class one rb module ModuleOne module Moduletwo class
  • Rails 4 单选按钮表单助手,true 不验证

    我在 needs dist 上附加了简单的是或否单选按钮 当我提交表单时选择 否 它工作得很好 但是当我选择 是 时 它会抛出验证错误吗 它仅在 needs dist gt true 时有效 Model validates presence

随机推荐

  • 从 .txt C 读取

    我在C语言方面遇到了一些麻烦 我有一个 txt 文件 其中包含以下形式的各行 F 65 S 4 1 139 56 3704 26 和我的程序 p fopen dados txt r if p NULL printf n nNao foi p
  • 保存EditText并自动检索

    您好 我正在尝试将 EditText 小部件值保存在手机 平板电脑的内部存储器中 以便应用程序关闭或活动停止时可以自动检索它们 所有这些都可以使用保存按钮进行 小部件的值由用户输入 您应该使用共享首选项 共享首选项用于将数据存储在本地应用程
  • 以非 root 用户身份使用 libusb-1.0 访问 USB 设备

    我正在尝试以 RHEL5 上的非 root 用户身份连接 USB 设备 该设备是一个 GPIO 接口 其文档可以在http www xdimax com sub20 sub20 html http www xdimax com sub20
  • Rails c 无法在 Rails 5 中工作

    关于在 Rails 5 应用程序内的终端中使用命令 rails c 抛出的错误如下所示 我不知道这在类似问题中意味着什么 解决方案是使用弹簧停止 我也尝试过 但没有 它仍然给出相同的错误 如果有人能指出这里的错误 那就太好了 Running
  • Hibernate:如何按id升序选择最后N行? (在单个查询中)

    休眠版本 5 2 我正在尝试使用子查询来做 并使用setMaxResults int session createQuery FROM SELECT FROM tickets ORDER BY id DESC limit 3 sub ORD
  • html5 canvas 游戏 - 如何添加视网膜支持

    我正在为 iPhone 创建 HTML5 画布游戏 我想支持视网膜和非视网膜显示器 我的问题是 如何同时支持视网膜和非视网膜显示器 即 执行此操作的一般实现是什么 我是否使用 iPhone 尺寸编写游戏 然后添加视网膜支持 或者我是否创建游
  • Dynamodb - 更新对象数组中 JSON 对象的值

    以下是存储在 DynamoDb 中的示例项目对象 记录 我使用 NodeJS 和AWS DynamoDB DocumentClient访问数据库 我正在构建一个 PUT 函数来更新数组中 JSON 对象的状态 该函数将有权访问该项目的uui
  • 在 Apache 中使用 mod_rewrite 处理中文字符

    我无法找到有关使用中文字符的 Apache mod rewriting 的信息 我能找到的所有信息都与数字有关 我想重写 character php character 宠 其中字符是搜索结果 因此会有所不同 character 宠 这是我
  • 共享主机帐户中的 php.ini 配置更改

    我尝试使用 htaccess ini set 覆盖默认的 php ini 配置 但在执行脚本时配置没有得到反映 这里 PHP 安装为 fastcgi 并位于共享托管帐户中 有什么方法可以更改 php ini 设置 或者我需要将我的帐户升级到
  • Rails 2.3:如何将此 SQL 语句转换为named_scope

    弄清楚如何从这个 SQL 查询创建一个named scope 有点困难 select from foo where id NOT IN select foo id from bar AND foo category ORDER BY RAN
  • mysql如何连接两个表?

    我有两张桌子 services id client service and clients id name email 如何列出餐桌服务并汇总顾客餐桌上的顾客姓名 表中的客户服务字段有客户表中客户的id 我很感谢你现在的帮助 SELECT
  • 是否可以从maven编译grunt项目?

    我正在尝试从 Maven 中执行 grunt 任务 而不需要安装 Node js 或任何东西 这是因为我不希望 Jenkins 打包我的工件 并且我无法在那台机器上安装 Node js 我知道使用 npm 和一些命令就可以让它工作很容易 但
  • 如何使用 Java 将 JMS 消息排入 Oracle AQ 中

    我有一个队列类型为 SYS AQ JMS TEXT MESSAGE 的 Oracle AQ 我想做的是将文本从 java 应用程序插入到提到的队列中 等效的 SQL 查询是 declare r enqueue options DBMS AQ
  • Cytoscape.js 的性能和布局

    我正在测试 Cytoscape js 的渲染性能 我的图表包含大约 5000 个节点和 5000 个边 没有 x y 位置 使用 Cytoscape js 的自动布局 但欧拉布局扩展在渲染完所有节点和边后需要花费超过15秒的时间 在下次操作
  • Google Plus 登录集成错误 iOS

    您好 我正在尝试在我的 iOS 应用程序上集成 google 登录 我已按照此说明进行操作link https developers google com mobile ios getting started 这些示例工作正常 但是当我尝试
  • 谷歌的 oauth2 范围有深入研究吗?

    我正在寻找有关 google 使用 oauth 范围的一些深入的详细信息 我的云端硬盘应用程序is工作 所以我可以简单地使用范围 但是我有以下详细问题 问题 我指定了两次范围 一旦进入我的应用程序 然后也进入 API 安慰 这两个范围分别有
  • MS Graph API 中的分页

    图形API分页 https graph microsoft io en us docs concepts paging解释响应将包含一个字段 odata nextLink其中将包含一个skiptoken指向下一页内容 当我测试 API 时
  • Instagram API。 “无法到达回调 URL”

    好的 伙计们 这是设置 我正在开发一个节日网站 需要使用 Instragram API 客户希望自动从 Instagram 加载使用特定主题标签的图片 没问题 Instagram API 支持此功能以及更多功能 但是 当我尝试进行订阅 通过
  • 我可以编写一个断言多个不变量的类型保护吗?

    我可以编写一个类型保护来断言一个或多个子对象一个论点 在伪代码中 它可能看起来像这样 class C a number b string function assertInitialized this a is number and thi
  • 如何验证 has_many :through 连接模型的唯一性?

    我有通过投票模型加入的用户和问题 用户可以对问题进行投票 他们可以投票赞成或反对 这记录在投票模型中 首先 我希望能够阻止用户向一个方向投多次票 其次 我想让用户投反对票 因此 如果他们投了赞成票 他们仍然应该能够投反对票 这将取代赞成票