如何将属性保存到 has_many :通过连接表,没有现有记录可供构建

2024-05-21

我有一个表单,可以使用以下命令创建新的子记录和新的父记录accepts_nested_attributes_for

孩子和家长都有一个has_many :through像这样的关联:

class Child < ActiveRecord::Base
   has_many :relationships
   has_many :parents, through: :relationships
   accepts_nested_attributes_for :parents
   accepts_nested_attributes_for :relationships, allow_destroy: true
end

class Parent < ActiveRecord::Base
   has_many :relationships
   has_many :children, through: :relationships
end

class Relationship < ActiveRecord::Base
   belongs_to :child
   belongs_to :parent
   accepts_nested_attributes_for :parents

   #has :schedule attribute
end

我想设置schedule属性同时存在于关系中并且不能使用accepts_nested_attributes_for因为我正在操纵控制器中的一些数据来确定schedule保存之前的对象。

关于堆栈溢出,有很多答案可以使用预先存在的父记录来完成此操作,但对于以前不存在任何关联的情况,我很难找到任何答案。

我尝试用after_create模型中的回调但无权访问params并且已经了解到无论如何这样做都是不好的程序。 (Rails 如何将参数从控制器传递到模型内的 after_save https://stackoverflow.com/questions/4725185/rails-how-to-pass-params-from-controller-to-after-save-inside-model).

理想情况下我想设置schedule在创建关系记录的同一个数据库调用中child_id and parent_id.

对此的任何帮助都会很棒,谢谢

UPDATE

截至原始职位的控制器

def new
  @child = Child.new
end

def create
  @child = Child.new(params[:child])
  schedule = build_schedule(params)
  # Need to save schedule to @child.relationship[0].schedule somehow
  if @child.save!
    redirect_to admins_path
  else
    render 'new'
  end
end

private

def build_schedule(params)
  # works with params[:mon, :tue, :wed, :thu, :fri] to return a schedule object.
end

The parent是使用构建的Ryan Bates 的嵌套表单助手 http://railscasts.com/episodes/196-nested-model-form-revised?view=comments。这是它的构建线:

module ApplicationHelper
  def link_to_add_fields(name, f, association)
    new_object = f.object.send(association).klass.new
    ...
  end
end

我不是在建造relationship无论如何,据我所知,它是由 Rails 神奇地构建的。

Trying 丹尼·范霍夫建议@child.relationships[0].schedule = i get undefined method schedule=' for nil:NilClass因为不存在任何关系。

如果我事先建立关系new or create行动使用@child.relationship.build我保存了 2 条关系记录:

我建造的那个有schedule已保存但没有parent_id(家长组 ID) 第二条记录是神奇地构建的,并且具有正确的 id,但没有schedule.

现在当尝试时里克·佩克的建议通过添加

def params
    params.require(:child).permit(relationships_attributes: [:schedule])
    # tried with and without `parents_attributes`
end 

I get a stack level too deep上的错误params.require线。我也不完全明白这是做什么的。 (我对 Rails 还很陌生)

感谢您的帮助!


我在我的一个网站中有一个与您类似的结构,它工作正常,除了我(翻译成您的示例)有

attr_accessible :relationships_attributes
accepts_nested_attributes_for :relationships, allow_destroy: true

在我的关系模型中,我使parent_id可访问

这允许在控制器中执行类似的操作

@child.relationships[0].schedule = ...

甚至在救孩子之前

或者,在输入家长详细信息时立即从您的视图中设置时间表

如果不清楚的话请给我评论!

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

如何将属性保存到 has_many :通过连接表,没有现有记录可供构建 的相关文章

  • 我可以从安装 Rails 引擎的真实应用程序运行它的规格吗?

    我有一个 Rails 引擎 旨在为我们的一个更大的项目提供一些模型和控制器 引擎有一套相当不错的规格 在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器 以确保引擎正在做它应该做的事情并与更大的应用程序一起工作 然而 即使所有测试
  • NoMethodError:Mocha 和 Rails 3 未定义方法“模拟”

    我尝试在 Rails 3 项目中使用 mocha 但不断收到以下异常 NoMethodError undefined method mock for
  • simple_fields_for 没有出现 [rails 4]

    我正在尝试创建两个隐藏字段 其中一个显示没有问题 但来自嵌套表单的另一个则没有 产品 rb class Product lt ActiveRecord Base has many product options dependent dest
  • Ruby on Rails 从视图路由到控制器中的自定义方法

    我有一个控制器名称帖子 在我的 config routes rb 我用过这个 resources posts app controllers posts controller rb class PostsController lt Appl
  • Rails 应用程序在模型间保存方面遇到问题

    我正在开发一个从网站下载元标签并然后保存的应用程序 下载发生在一个名为Site 我想将下载的机器人元标签保存到一个名为的模型中robots tag它通过一个名为的连接表连接到站点meta tag sites 但是我在站点模型中编写的用于执行
  • Rails 7 缺失部分

    我正在升级到 Rails 7 1 并在使用 JS 部分的视图中遇到奇怪的错误 缺少部分 account stripe js erb application stripe js erb 与 locale gt fr formats gt ht
  • 如何在 Rails 3 项目中包含 SSL 证书

    我开发了一个 Rails 3 项目 它使用thin作为服务器 与 Devise 和 Doorkeeper 一起进行身份验证 我想在我的项目中添加 SSL 证书 我看过一些描述如何在 Rails 3 项目中使用 SSL 证书的帖子 但没有一个
  • Rails - 格式日期字段

    如何设置 date field 的日期格式样式 我得到了以下表格 这是为日期字段呈现以下 HTML
  • MongoMapper 和 bson_ext 问题

    我无法让 MongoMapper 与我的 Rails 应用程序一起使用 我收到此错误消息 注意 C 扩展未加载 这是最佳 MongoDB Ruby 驱动程序性能所必需的 您可以按如下方式安装扩展 宝石安装 bson ext 如果安装后继续收
  • 处理rails应用程序中的rack_throttle异常

    当超出速率限制时 如何处理由rack throttle gem 生成的错误 现在我只收到包含以下内容的回复 Internal Server Error undefined method each for 403 Forbidden Rate
  • pow 说: Bundler::GemNotFound:无法在任何源中找到 rake-0.9.2.2

    我有一个运行良好的 Rails 应用程序rails s 但是当我尝试使用 pow 加载它时 我收到此错误 Bundler GemNotFound Could not find rake 0 9 2 2 in any of the sourc
  • Unicorn + Rails + 大型上传

    我试图在使用 Rails 在 Heroku 上运行 Unicorn 时允许进行大型上传 但我意识到任何大型上传可能需要比 Unicorn 工作线程的超时时间更长的时间 这意味着 我见过这种情况发生 Unicorn 主进程将杀死上传大文件的工
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users
  • Capybara 无法从 Stripe 中找到表单字段?

    我正在学习 Ruby on Rails 并且正在开发一个使用 stripe 创建高级帐户的应用程序 另外 我正在使用 Rspec 和 Capybara 进行集成测试 require spec helper feature user upgr
  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • 使用 Devise 嵌套资源 - Rails3

    我正在尝试设置一个配置文件控制器来与设备注册成员一起使用 我已经创建了Profile模型和控制器并添加了one to one relationship通过增加belongs to member to my 配置文件 rb模型和has one
  • 如何在自定义类上使用 ActiveModel 验证和回调?

    我正在尝试在自定义类上使用 ActiveModel 验证和回调 class TestClass include ActiveModel Validations define model callbacks validate attr acc
  • database.yml 的所有可能键是什么

    我刚刚发现reconnect true配置选项可以在database yml文件 还有哪些其他可能的配置选项 是否有所有选项的完整参考 已知的关键示例 default default adapter mysql2 encoding utf8
  • 如何使用 rspec 测试传递到 Rails 3 中的控制器的参数?

    我们的代码 describe GET show do it assigns the requested subcategory as subcategory do subcategory Subcategory create valid a

随机推荐

  • 在这种情况下,scala 的类型检查是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Start writing your ScalaFiddle code here sealed trait DSL A def run
  • 如何正确设置 statsmodels.tsa.ar_model.AR.predict 函数的开始/结束参数

    我有一个来自不规则间隔时间序列的项目成本数据框 我想尝试应用该数据框statsmodelAR模型对抗 http www statsmodels org stable generated statsmodels tsa ar model AR
  • 仅在第一次访问页面时显示 jQuery 弹出窗口

    我是新来的jQuery http en wikipedia org wiki JQuery 我的网站上有一些需求 我想仅在用户到来时才第一次显示 jQuery div 弹出窗口 无需一次又一次地展示 我仍然在使用这个 但我不知道第二次如何隐
  • 使用哈希时 fetch 与 [] ? [复制]

    这个问题在这里已经有答案了 来自鲁比 科恩斯about hashes rb 为什么你可能想使用 fetch代替 当访问哈希键时 默认情况下 使用 如果存在则检索哈希值 如果不存在则返回 nil Using fetch给你一些选择 请参阅文档
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 如何以编程方式确定哪些数据存储区索引有错误?

    当我跑步时更新索引在 Google 数据存储上我收到以下消息 它告诉我通过查看 GUI 来确定哪些索引有错误 然后删除这些索引 我的 200 个索引中有 51 个错误 从 GUI 中复制它们是不可行的 编辑 通过费力地从 datastore
  • Delphi:现场记录应用程序错误

    使用 Delphi 7 我想知道是否有一个免费组件可以在我的应用程序在远程站点运行时收集诊断信息并帮助我调试错误报告 也许它会记录每个选择的菜单项 单击的控件 文本输入等 也许它只是在崩溃时转储堆栈 也许它还有其他作用 我不介意添加代码 例
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 在pygame中旋转矩形(不是图像)

    在 pygame 中我使用pygame draw rect screen color rectangle 对于我的程序中的所有矩形 我希望能够将这些矩形旋转到任何角度 我看过下面的代码来旋转IMAGES但我的问题是矩形 pygame tra
  • 在 Vim 中隐藏所有(不)匹配的行

    是否可以在 vi 或 Vim 中显示 隐藏所有匹配行 不突出显示 而只显示那些行 例如 我有一个带有单词单词的文本ERROR 如何让它只显示包含以下内容的行ERROR以及如何只显示线条而不显示ERROR 有解决办法吗不删除所有匹配的行然后撤
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • find_element_by_* 命令在 Selenium 中已弃用

    启动功能时 def run driver path driver webdriver Chrome executable path driver path driver get https tproger ru quiz real prog
  • 添加动态数据时 footable 出现问题

    我需要 jQuery Mobile 方面的一些帮助富表 http css tricks com footable a jquery plugin for responsive data tables 我正在表中动态添加数据 HTML tab
  • 来自另一个类的 Qt C++ GUI 调用

    我通过 gui 拖放创建了一个按钮和一个文本浏览器 UI 以及单击按钮功能是在 mainwindow cpp 中创建的 有一个 main cpp 但这是无关紧要的 因为在单击开始按钮之前程序不会启动 include mainwindow h
  • 带千位分隔符的输入掩码 ionic 3

    我需要一个thousand separator input mask指令或其他Ionic 3应用程序 我已经尝试了 2 个指令 但他们都没有工作 你知道这方面的工作指令吗 e g 50 000 html
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 VirtualBox 进行远程 Xdebug

    我正在尝试让远程调试工作 PHP 正在虚拟机上运行 我正在尝试从主机上的 NetBeans 进行调试 我已按照说明进行操作here http xdebug org docs remote 在Windows 7防火墙和VirtualBox网络
  • 当您在 .net 项目中添加 dll 的引用时会发生什么

    我在 net 中有一个类库项目 名为 A 构建时将创建一个 dll 即 A dll 我有另一个项目 B 该项目包含 dll A dll 的引用 当我在 B 中添加 A 的引用时到底会发生什么 谁能告诉我在编译时和运行时会发生什么 编译器将
  • ckeditor 字体样式 13 px

    我之前曾问过相关问题 但在尝试了所有发生错误的可能性之后 我发现 在ckeditor中 如果您复制一些文本并粘贴它 它默认粘贴为 p style font size 13px 示例图片 HTML CODE p div p Original
  • 如何将属性保存到 has_many :通过连接表,没有现有记录可供构建

    我有一个表单 可以使用以下命令创建新的子记录和新的父记录accepts nested attributes for 孩子和家长都有一个has many through像这样的关联 class Child lt ActiveRecord Ba