验证外键时 Accepts_nested_attributes_for 出现问题

2024-04-15

我正在使用 Ruby on Rails v3.2.2。我想解决使用时与外键验证相关的问题accepts_nested_attributes_for and validates_associated回报率方法。也就是说,我有以下模型类:

class Article < ActiveRecord::Base
  has_many :category_associations, :foreign_key => 'category_id'

  accepts_nested_attributes_for :category_associations, :reject_if => lambda { |attributes| attributes[:category_id].blank? }
  validates_associated :category_associations
end

class CategoryAssociation < ActiveRecord::Base
  belongs_to :article, :foreign_key => 'article_id'
  belongs_to :category, :foreign_key => 'category_id'

  validates :article_id, :presence => true
  validates :category_id, :presence => true
end

...我有以下控制器操作:

class ArticlesController < ApplicationController
  def new
    @article = Article.new
    5.times { @article.category_associations.build }

    # ...
  end

 def create
   @article = Article.new(params[:article])

   if @article.save
     # ...
   else
     # ...
   end
 end
end

通过上面的代码(“灵感”来自嵌套模型表格第 1 部分 http://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast铁轨铸造)我的目的是在创建文章时存储类别关联 (note:类别对象已存在于数据库中;就我而言,我只想存储创建类别关联)。但是,当我从相关视图文件提交相关表单时,出现以下错误(我正在记录错误消息):

{:"category_associations.article_id"=>["can't be blank"], :category_associations=>["is invalid"]}

为什么会发生这样的事validates_associated seems https://stackoverflow.com/questions/5176510/validates-associated-not-checking-existence-of-associations#comment5826558_5176607运行该方法article.category_association.valid?但前提是article.category_association.article_id is not nil?如何解决存在验证的问题article_id外键?

但是,如果我注释掉validates :article_id, :presence => true in the CategoryAssociation模型类,它按预期工作,但是好像是not正确的做法not验证外键 https://stackoverflow.com/questions/13345250/is-it-really-needed-to-validate-foreign-keys/13346791#13346791.


如果我注释掉validates_associated :category_associations in the Article模型类,我仍然收到错误:

{:"category_associations.article_id"=>["can't be blank"]}

Use inverse_of链接关联,然后验证关联对象是否存在,而不是实际外键是否存在。

示例来自the docs http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html:

class Member < ActiveRecord::Base
  has_many :posts, inverse_of: :member
  accepts_nested_attributes_for :posts
end

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

验证外键时 Accepts_nested_attributes_for 出现问题 的相关文章

随机推荐

  • Google Api:: 错误:invalid_scope

    我使用 google api OAuth2 登录 gmail 帐户 当 gmail 登录时 我进行身份验证 然后收到错误 错误 invalid scope 此应用尚未经过验证可以访问 无效 https www googleapis com
  • 如何在 vscode API 中替换后删除选择

    在为 vscode 创建扩展时 我陷入了选择困境 现在的问题是 当我通过 api 替换某些范围的 textEditor 时 它会替换该范围并选择该范围 对于片段来说这是一个好主意 但我的扩展要求不是选择替换的文本 我在 api 中搜索但没有
  • 如何使用swift、spritekit和xcode调用admob插页式广告?

    我一直在寻找这个问题的答案 我在 Objective C 中找到了很多例子 谷歌开发者文档等 并在 swift 中找到了一些答案 但没有使用 spritekit 并且作为一个新手 我只是还没有无法弥补这些教程中的差距 将它们整合到我的项目中
  • 如何向正在运行的气流服务添加新的 dag?

    我有一个气流服务 当前作为网络服务器和调度程序的单独 Docker 容器运行 两者都由 postgres 数据库支持 我在两个实例之间同步了 dags 并且在服务启动时正确加载了 dags 但是 如果我在服务运行时将新的 dag 添加到 d
  • 无法让测试单元启动在 ruby​​ 1.9.2 中工作

    我正在使用 Ruby 1 9 2 ruby v 生成 ruby 1 9 2p290 2011 07 09 修订版 32553 x86 64 linux 我正在尝试让它工作 require test unit class TestStartu
  • 如何“合并”、“展平”或“透视”将多行返回到单个结果的查询结果?

    我对表进行了一个简单的查询 它返回如下结果 id id type id ref 2702 5 31 2702 16 14 2702 17 3 2702 40 1 2703 23 4 2703 23 5 2703 34 6 2704 1 14
  • 使用vba从雅虎财经抓取数据

    我需要从雅虎财经页面读取股票的收盘价 我在使用谷歌财经页面之前就已经回答了这个问题 但该页面不再可用 我相信谷歌已经完全改变了它的财经页面 我相信我可以在雅虎财经上应用同样的方法 只需稍作修改 假设雅虎财经对股票代码 AAPL 苹果 有以下
  • 如何使用不同用户表的多重身份验证注销 JWT 令牌

    这是 config auth php 中的代码 guards gt web gt driver gt session provider gt users api gt driver gt jwt provider gt users hash
  • 领域文件的大小是如何发展的?

    领域文件的大小是如何发展的 首先 我有一个包含多个属性的领域文件 其中一个是包含 860 个条目的数组 每个数组条目又包含几个属性 一个数组属性声明条目的名称 我观察到以下情况 如果名称属性为 Criteria A1 直到 Criteria
  • SKReceiptRefreshRequest 每次都询问密码

    我在用SKReceiptRefreshRequest验证来自服务器的收据 问题是每次提示密码时它都会询问我 谁能帮我建议一种更好的方法来验证用户收据 这就是我正在做的事情 我正在使用refreshReceipt当应用程序启动时 void r
  • 如何将 GridLayout.Spec 用于扩展多行的列?

    我正在尝试动态创建一个 2 行 4 列的表 但每种情况下行和列的大小不应相同 也许我会附上一张图片 我想 据我了解 当我不使用 XML 标记来使用 setLayoutParams 中的 GridLayout Spec 来实现此目的时 但我不
  • 如何让属性设置器通过SQL函数发送值

    我试图在 Rails 生成其 sql 查询之前 使 ActiveRecord 模型中的属性设置器将其值包装在 text2ltree postgres 函数中 例如 post path 1 2 3 post save 应该生成类似的东西 UP
  • 对象“_Application”的方法“VBE”失败

    我的一位客户在运行下面的 Excel VBA 代码时遇到问题 他收到以下错误Method VBE of object Application failed 但只有一次 在他打开 VBE 后 它开始工作 而且 直到昨天 它还对他有效 他正在使
  • 如何在 Angular 4 中为数字管道指定语言环境千位分隔符

    例如 如何为 Angular 4 中的数字管道指定 覆盖默认 区域设置 千位分隔符 p total number 角度 5 从 Angular 5 开始 区域设置参数已添加到十进制管道中 如官方文档中所示 https angular io
  • 将多个 go 例程的响应获取到数组中

    我需要从多个 go 例程获取响应并将它们放入一个数组中 我知道通道可以用于此目的 但是我不确定如何确保所有 go 例程都已完成结果的处理 因此我正在使用等待组 Code func main log Info Collecting ints
  • 允许使用 Angular FileSaver.js 选择目录

    我在用文件保存器 js https github com eligrey FileSaver js从 Angular 保存文件 但是 我想允许用户选择目录 我怎样才能做到这一点 我不相信这是可能的 浏览器可以选择是否向用户显示 另存为 对话
  • 找不到模块“rxjs/subject/BehaviorSubject”

    我正在使用 Angular 2 当我使用这两者中的任何一个时 我的程序运行良好 import BehaviorSubject from rxjs Rx import BehaviorSubject from rxjs 但是 我尝试使用以下方
  • 从 Delphi 组件捕获 WM_COPYDATA

    我正在尝试编写一个组件 通过 WM COPYDATA 在应用程序之间发送字符串消息 我想捕获 WM COPYDATA 但这不起作用 TMyMessage class TComponent private Private declaratio
  • 如何将 Liquid 标签突出显示在有序列表中?

    这就是我want页面为 ol li first li li second code code li li third li ol 这就是我正在写的 1 first 2 second highlight ruby code here endh
  • 验证外键时 Accepts_nested_attributes_for 出现问题

    我正在使用 Ruby on Rails v3 2 2 我想解决使用时与外键验证相关的问题accepts nested attributes for and validates associated回报率方法 也就是说 我有以下模型类 cla