Ruby on Rails 中的多态性和形式

2023-12-03

最近我充满了疑问,但感谢这个很棒的社区,我学到了很多东西。

我之前得到了有关多态关联所需的所有帮助,现在我有一个关于使用多态模型处理表单的问题。例如,我有 Phoneable 和 User,因此当我创建表单来注册用户时,我希望能够为用户分配一些电话号码(即:手机号码、工作号码、家庭号码)。

class User < ActiveRecord::Base
  has_many :phones, :as => :phoneable
end

class Phone < ActiveRecord::Base
  belongs_to :phoneable, :polymorphic => true
end

class CreateUsers < ActiveRecord::Migration
  t.column :name, :string
  t.references :phoneable, :polymorphic => true
end

class CreatePhones < ActiveRecord::Migration
  t.column :area_code, :integer
  t.column :number, :integer
  t.column :type, :string
  t.references :phoneable, :polymorphic => true
end

现在,当我创建表单时,我感到很困惑。通常我会执行以下操作:

- form_for :user, :html => {:multipart => true} do |form|
  %fieldset
    %label{:for => "name"} Name:
    = form.text_field :name
    ##now how do I go about adding a phone number?
    ##typically I'd do this:
    ##%label{:for => "phone"} Phone:
    ##= form.text_field :phone

使用多态性,我是否可以采用相同的方式,但使用 fields_for ?

- user_form.fields_for :phone do |phone| %>
  %label{for => "area_code"} Area Code:
  = phone.text_field :area_code
  %label{for => "number"} Number:
  = phone.text_field :number

在这种情况下这是正确的方法吗?


在我们进一步讨论之前,我确实注意到一个问题 - 你不需要t.referenceshas_many协会的一边。所以你不需要它create_user模型。它的作用是创建phonable_idphoneable_type列,您只需要在多态模型中使用它。

您正在沿着正确的道路前进fields_for方法。但为了使其正常工作,您需要告诉模型如何处理这些字段。你用accepts_nested_attributes_for类方法。

class User < ActiveRecord::Base
  has_many :phones, :as => :phoneable

  accepts_nested_attributes_for :phones
end

还有一件小事,你需要有fields_for指向exact协会名称

- form_for @user do |user_form|
  - user_form.fields_for :phones do |phone|

代替

- form_for @user do |user_form|
  - user_form.fields_for :phone do |phone|

并确保你删除了你的流浪者%>erb 标签:)

More on accepts_nested_attributes_for: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

我希望这有帮助!

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

Ruby on Rails 中的多态性和形式 的相关文章

随机推荐

  • 放大二维 UICollectionView

    我创建了一个UICollectionView这是水平和垂直的 它有不同的UICollectionViewCells 一切都布置正确 现在我正在努力做到zoomable The UICollectionViewCells也正确调整了大小 每次
  • 一般解析字符串到日期

    我正在与 Web 服务通信 并且 json 响应中包含日期 问题是这些日期的格式不同 有没有通用的方法来解析这些字符串 您可能应该有一个有序的格式列表来尝试 最好使用乔达时间作为一个比内置 API 好得多的 API 然后依次尝试每个 API
  • Alexa 帐户链接 - “帐户链接凭据无效”

    我正在创建带有帐户链接的 Alexa 技能 我获得了链接授权码并将其兑换为访问令牌 然后 我尝试将所有参数 代码 访问令牌 技能 ID 放入 Alexa Skill Activation API 中 我总是收到一条消息 帐户链接凭据无效 v
  • 更新jar中的.class文件

    我想更新一个 class文件在一个jar与一个新的 最简单的方法是什么 尤其是在 Eclipse IDE 中 本教程详细说明如何更新 jar 文件 jar uf jar file
  • 从 VS2008 升级到 VS2010 后,Web 安装项目删除文件

    我有一个使用 VS2008 构建的 Web 设置项目 我已经将我的解决方案转换为 VS2010 现在当我构建新的安装程序并从 MSI 运行安装时 它安装得很好 然后在最后一步 删除刚刚安装的所有文件 我已将RemovePreviousVer
  • 如何使用inst/extdata中的文件? R 包检查阻止在 R 3.6 中使用 system.file()

    我正在编写 R 包并尝试使用外部文件 我把它放在inst extdata并使用system file extdata file csv package mypackage 在我的函数中加载文件 官方手册只描述了这种获取数据的方式inst e
  • Spring应用程序似乎没有持久化数据

    我正在尝试将一些内容写入我的数据库 但尽管它报告 成功完成请求 但它不起作用 成功后 一切似乎都工作正常 我的控制器正确地重定向了我 Debug DEBUG a d p payment PaymentServiceImpl Requesti
  • 如何让 slickgrid div 根据表格大小调整大小

    我希望我们有一些熟悉 slickGrid 的用户也能看到 StackOverflow 如何使用它 我有一个包含 slickGrid 的 HTML 如下所示 div style width 600px margin 25px 0 0 0 di
  • 领域数据同步不一致

    我遇到一个问题 每次执行相同的查询时 Realm 有时会返回不同的数据 目前我正在使用 SyncAdapter 进行上传 我们的想法是尝试实现离线模式 因此 当用户创建一个项目时 它会被添加到领域数据库中 我通过获取 maxId 并向其添加
  • 实时 Admob 广告突然停止在我的应用中显示

    6 月份 Admob 广告效果非常好 AdMob 向我发送了一封包含验证 PIN 码的信件 以验证我的身份和付款详细信息 七月初左右 几乎所有实时广告都停止在我的应用程序中显示 我仍然发出相同数量的请求 但展示次数太低 我已降至每天 0 0
  • 将 Pandas DataFrame 转换为 JSON

    我将数据存储在 pandas dataframe 中 我想将 tat 转换为 JSON 格式 可以使用以下代码复制示例数据 data Product A B A Zone E A A N E A start 08 00 00 09 00 0
  • 使用 Carthage 构建时如何选择 Swift 工具链

    我正在创建一个 iOS 应用程序并使用 Carthage 来构建外部库 由于我目前使用的库都是 Swift 2 和 Swift 3 所以我有点紧张 因此 我希望拥有一个 Swift 2 分支和一个 Swift 3 分支进行开发 然后在库全部
  • UIPopoverController 太大而 UIPickerView 太小

    我有一个UIPickerView显示在a内UIPopoverController 尺寸UIPickerView are 320x216 由于某种原因 UIPickerView似乎是适当高度的 3 5 并且UIPopoverControlle
  • 如何在 R 中对特定范围内的函数求和?

    这里有三列 indx vehID LocalY 1 2 35 381 2 2 39 381 3 2 43 381 4 2 47 38 5 2 51 381 6 2 55 381 7 2 59 381 8 2 63 379 9 2 67 38
  • 使用 ...spread,但 redux 仍然会抛出有关状态突变的警告

    Redux 在调度时抛出警告 Error A state mutation was detected inside a dispatch in the path roundHistory 2 tickets Take a look at t
  • 仅当外部文件存在时才安装

    我想指示 Inno Setup 仅在某个外部文件存在时才安装该文件 Like so Source d sources SomeDLL dll DestDir app Flags external regserver uninsneverun
  • 此操作无法完成。再试一次 (-22421)

    我正在尝试上传Apple TV应用程序到应用程序商店进行测试 但我遇到了问题 此操作无法完成 再试一次 22421 如下图所示 那我能做什么呢 发生这种情况是因为 Apple 的服务器可能无法正常工作 请稍候或下次尝试 它最终肯定会起作用
  • Flutter:Firebase Realtime 从对象列表中删除对象

    我正在咨询数据库中注册的所有俱乐部 对于每个俱乐部 我都会将其添加到对象列表中 当该人删除俱乐部时 会从数据库中删除俱乐部 但在项目列表中未删除 我尝试执行以下操作 我的 NotClub Player dart 类 FIREBASE CLU
  • 如何在 NetBeans 7.0 中关闭左括号上的方法自动完成功能?

    我想我打字很快 因为如果我输入字符 ArrayList myArray myArray size NetBeans 自动完成将以下内容放入我的编辑器中 ArrayList myArray myArray add someVar 为什么 因为
  • Ruby on Rails 中的多态性和形式

    最近我充满了疑问 但感谢这个很棒的社区 我学到了很多东西 我之前得到了有关多态关联所需的所有帮助 现在我有一个关于使用多态模型处理表单的问题 例如 我有 Phoneable 和 User 因此当我创建表单来注册用户时 我希望能够为用户分配一