使用 fields_for 的 Rails 错误消息

2024-02-29

在我的分类帐会计轨道应用程序中,我有一个基金模型

class Fund < ActiveRecord::Base
    belongs_to :agency
    has_many :gl_accounts

    accepts_nested_attributes_for :gl_accounts

    attr_accessible :name, :agency_id, :fund, :user_stamp, :active
    attr_accessible :gl_accounts_attributes

和一个 gl_accounts 模型

class GlAccount < ActiveRecord::Base
    belongs_to :agency
    belongs_to :fund
    has_many :class_sessions
    has_many :facilities

    validates :agency_id, :fund_id, :name, :gl_account_number, :active, :user_stamp, :account_type, :presence => true
    validates_uniqueness_of :account_type, :scope => :fund_id, :if => :unique_account_type

    attr_accessible :agency_id, :fund_id, :name, :gl_account_number, :active, :user_stamp, :account_type

    def unique_account_type
        [3,4,6,7,8].include? account_type
    end

创建新基金时,必须同时创建 5 个 gl_accounts,所以我使用fields_for当为基金创建新记录时,在 gl_account 模型中创建 5 条新记录。一切似乎都正常,直到我提交表格并收到一条错误消息“总账户资金不能为空”。

gl_accounts 模型上没有“fund”属性。我认为也许rails正在删除“_id”部分(因为有一个fund_id外键字段),但我认为使用嵌套模型和fields_for自动在fund_id字段(gl_account模型的外键)中添加正确的值。但即使我在表单中添加一个带有fund_id值的隐藏字段,我仍然收到错误消息说“fund”不能为空。

那么,也许 Rails 试图告诉我我还有其他问题?

这是参数:

{"utf8"=>"✓",
 "authenticity_token"=>"MNWLFOnLOE+ZRsUf9mogf2cq/TeQ+mxtrdaVu3bEgpc=",
 "fund"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "name"=>"Junk",
 "fund"=>"44",
 "active"=>"1",
 "gl_accounts_attributes"=>{"0"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "account_type"=>"6",
 "name"=>"Cash Account",
 "active"=>"1",
 "fund_id"=>"1",
 "gl_account_number"=>"44-498-965-789"},
 "1"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "account_type"=>"7",
 "name"=>"Credit Card Account",
 "active"=>"1",
 "fund_id"=>"1",
 "gl_account_number"=>"44-498-965-163"},
 "2"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "account_type"=>"3",
 "name"=>"Customer Account Balances",
 "active"=>"1",
 "fund_id"=>"1",
 "gl_account_number"=>"44-498-965-254"},
 "3"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "account_type"=>"8",
 "name"=>"Refunds Pending Account",
 "active"=>"1",
 "fund_id"=>"1",
 "gl_account_number"=>"44-498-965-456"},
 "4"=>{"agency_id"=>"1",
 "user_stamp"=>"6",
 "account_type"=>"4",
 "name"=>"Deferred Revenue Account",
 "active"=>"1",
 "fund_id"=>"1",
 "gl_account_number"=>"44-498-965-159"}}},
 "commit"=>"Add New Fund"}

尝试从 GlaAccount 类中的存在真实验证中删除fund_id。

validates :agency_id, :name, :gl_account_number, :active, :user_stamp, :account_type, :presence => true

并且也不要将fund_id添加为隐藏字段,因为,你是对的,“fields_for”会自动处理该问题,但这将在验证后发生。

因此,您不需要验证fund_id 是否存在。

Update

另外,为了确保fund_id永远不为空,您可以在数据库表中放置一个约束。使用以下代码创建迁移。

change_column :gl_accounts, :fund_id, :integer, :null => false

Update 2

为了确保资金存在,您需要检查资金是否存在而不是fund_id。

validates :fund, :presence => true

为此,您需要声明与“inverse_of”的关联,如下所示。

class Fund < ActiveRecord::Base
  has_many :gl_accounts, inverse_of: :fund
  accepts_nested_attributes_for :gl_accounts
end

class GlAccount < ActiveRecord::Base
  belongs_to :fund, inverse_of: :gl_accounts
  validates_presence_of :fund
end

有关更多详细信息,请参阅本指南。http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#label-Validating+the+presence+of+a+parent+model http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#label-Validating+the+presence+of+a+parent+model

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

使用 fields_for 的 Rails 错误消息 的相关文章

  • 使用 Ajax 在输入时提交 Textarea,然后渲染部分内容而不刷新整个页面

    目前我正在尝试通过 JS 和 Ajax 在没有提交按钮的情况下发表评论 并且它有效 问题是当帖子提交时 页面重新加载到 post id comment页面 我希望它呈现部分内容 而不是刷新整个页面或将我带到不同的页面 我对 JS 不熟悉 任
  • 为什么“捆绑”会在我的开发机器上安装生产 gem?

    Gemfile 说 gem sqlite3 groups gt development test gem mysql2 group gt production 然而当我打字时bundle install在我的开发机器上安装了所有 gem 我
  • Rails 5.1 CORS - 如何为不同环境设置不同来源

    我正在使用带有 Rail 5 1 API 的rack cors gem 根据文档 我有以下初始化程序 配置 初始化器 cors rb module Api Rails application config middleware insert
  • 在 Heroku 上托管的 Rails3 中强制使用“www”,无需 .htaccess

    我想知道是否有 Rack 替代方案来强制 URL 中包含 www 因为 Heroku 不使用 htaccess 文件 也许甚至是在路线中做到这一点的好方法 Thanks 在您的 ApplicationController 中 您可以简单地创
  • (Rails) Assert_Select 的烦人警告

    有谁知道如何让assert select在rake测试期间不输出所有那些讨厌的html警告 你知道 就像这样的东西 ignoring attempt to close body with div opened at byte 1036 li
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 为什么 RackMultipart* 文件保留在我的 Rails /tmp 目录中?

    我正在使用 Paperclip 2 3 来处理在 Ubuntu 上运行的 Rails 3 0 3 应用程序上的图像上传 Paperclip 正在按广告处理上传 但在应用程序的 tmp 文件夹中创建的 RackMultipart 文件仍然存在
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 获取嵌套参数

    我有一个带有嵌套参数的表单 在下面的示例中 如何获取控制器中的 amount whole 值 Parameters utf8 gt authenticity token gt KCmBI6RLh0LdUsM2r5H1vhNykS1IXecF
  • Windows 7 x64 上的 Ruby on Rails SQLite 问题

    当我尝试做的时候db create使用 Windows 7 x64 在具有此数据库配置的 sqlite 数据库上 development adapter sqlite3 database db development sqlite3 tim
  • 如何加载页面特定的rails 4 js文件?

    我正在阅读资产管道的 Rails 指南文档 它指出 CoffeeScript 页面特定生成的文件 如果清单上有 require tree 指令 则默认情况下可供用户使用 这对我不起作用我必须包括这个 在特定控制器上 我缺少什么 资产管道会将
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 在端口80启动webrick(mysql2 gem问题)

    我正在尝试让我的 webrick 在端口 80 上提供服务 我尝试过 rails server p 80 但访问被拒绝 后来我明白使用端口1 1024需要root权限 所以我尝试了这个 sudo rails server p 80 但是 现
  • 资产管道:仅对一个控制器使用 javascript 文件

    在 Ruby on Rails v4 中 我希望仅为特定控制器加载一个 js 文件 或一组 js 文件 执行此操作的标准方法是什么 在 application js 中有 require tree 线 我假设这需要删除 所以我并不总是加载每
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 从父应用程序重新打开 Rails 3 引擎类

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

    我用了以下date select助手 但没有一个显示默认情况下选择空白值的日期选择框 通过以下所有代码 我得到了选择框 但选择了当前日期 我在 Rails 2 3 2 上
  • Rails 资源单数还是复数?

    我有一条搜索路线 我想将其设为单数 但是当我指定单数路线时 它仍然会生成复数控制器路线 这是应该的样子吗 resource search Gives me search POST search format action gt create
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project

随机推荐