首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

form_with如何知道在模型内部调用哪个方法?

在Rails中,form_with是一个用于生成表单的辅助方法。它可以根据表单所对应的模型对象自动选择合适的HTTP方法(GET、POST、PATCH、PUT、DELETE)和路由路径。

form_with通过检查模型对象的状态来确定应该调用哪个方法。具体来说,它会检查模型对象是否是一个新记录(未保存到数据库)或者已经存在于数据库中。根据这些条件,form_with会选择以下方法之一:

  1. 如果模型对象是一个新记录(未保存到数据库),form_with会使用POST方法,并将表单提交到创建(create)动作的路由路径上。这样,当用户提交表单时,会调用控制器中的create方法来创建新的记录。
  2. 如果模型对象已经存在于数据库中,form_with会使用PATCH方法,并将表单提交到更新(update)动作的路由路径上。这样,当用户提交表单时,会调用控制器中的update方法来更新数据库中的记录。

需要注意的是,form_with会自动根据模型对象的类型和状态来生成合适的路由路径。如果你的模型对象是一个嵌套资源(nested resource),form_with也会相应地生成嵌套的路由路径。

以下是form_with的一些常见用法和示例:

  1. 使用form_with生成一个简单的表单:
代码语言:txt
复制
<%= form_with(model: @user) do |form| %>
  <%= form.text_field :name %>
  <%= form.email_field :email %>
  <%= form.submit %>
<% end %>
  1. 使用form_with生成一个嵌套资源的表单:
代码语言:txt
复制
<%= form_with(model: [@post, @comment]) do |form| %>
  <%= form.text_area :content %>
  <%= form.submit %>
<% end %>

在上述示例中,form_with会根据@user对象的状态选择合适的方法(POST或PATCH),并生成相应的路由路径。你可以根据需要在表单中添加其他字段和按钮。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云数据库MySQL版(TencentDB for MySQL)等。你可以在腾讯云官网上找到这些产品的详细介绍和文档。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于Spring 中方法内部调用自身方法事务 REQUIRE_NEW 不生效的解释

这种方式对 target.method() 方式的调用是可以拦截到的,对于类内调用 method() 方式则拦截不到。...}); dynamicProxy.a(); } } 执行结果为: invoke in proxy this is a this is b 从这可以看出你类内自行调用方法是不会被代理拦截到的...对于单纯的class,没有接口,则 Spring 使用 cglib 进行代理,这里 Spring实现了自己的 CallbackFilter,具体类可以参见 Spring 源码CglibAopProxy ,目标类的...,我们看到 Spring 获取当前被代理的对象,直接进行invoke,类内方法也不会被cglib 代理到 我们写一个测试方法来试下,在上面main 方法里最后加入测试代码: Enhancer enhancer...this is b Spring 针对这种情况通过 threadlocal 的方式暴露了当前类的代理,可以使用 AopContext.currentProxy(); 方式得到,使用获取到的代理类再调用方法就可以再次走事务的处理逻辑了

1.4K30

结构变量作为方法的参数调用方法内部使用的“坑”你遇到过吗?

很久没有写博了,今天一个同学问结构变量的问题,问结构到底是传递值还是传递引用。查过MSDN的都知道,结构默认是传递值的,因此方法内部,结构的值会被复制一份。...如果结构数组的元素象结构变量那样也是复制的,那么对于方法调用的内存占用问题,就得好好考虑下了。...public Point(int x, int y) { this.X = x; this.Y = y; } } 定义2个方法...,分别以传值和传引用的方式来调用结构变量: static void TestStruc(Point p) { p.X++;...Console.WriteLine("call by value Point[0]: X={0},Y={1}", arr[0].X, arr[0].Y); 结果: call by value Point[0]: X=1,Y=2 方法内部对结果数组元素的改变无效

2.5K100

使用rails实现最简单的CRUD

各个目录的作用为: app:存放web应用的控制器、视图、模型、helpers等,开发主要集中在这里 bin*:各种脚本 config:路由、数据库等的配置文件 db:数据库的schema...接下来定义控制器: class HelloController < ApplicationController def index end end rails足够智能可以自己视图文件夹寻找名为 index.html.erb...文章的增加 使用以下生成数据库模型: rails generate model Article title:string content:text 使用以下迁移数据库: rails db:migrate...按照上文中的方法创建好 new.html.erb 文件和 new 方法 new.html.erb 文件中写入: new article <%= form_with(scope:...此时我们需要定义提交之后的处理路径,从上面的路由配置中我们可以知道对应于 create 方法 def create @article = Article.new(article_params)

3.1K40

【UML】——为什么要使用UML

很敬佩哪些想想就能画出整个系统的UML图的人,因为他们头脑中有整个软件架构的蓝图,这样在编写实现的时候,就会知道哪个地方改怎么做,哪个地方如何扩展。   而想成为架构师,UML也是必备的技能。...面向过程,就是典型的C语言这种,一个main函数,从头走到脚,中间可能涉及到一些方法调用,但是整个代码完全是流水线一样。...每个对象内部具有一些复杂的变量以及方法,对外提供接口或者公共方法进行调用,这就是封装。而对象之间可以互相关的继承,借鉴存在的方法,这就是继承。...而这其中的难点,就是如何从现实世界中的业务场景转换到抽象的对象模型;而通过复杂对象模型如何表示业务场景。 ?   通过上面这个步骤,就可以从现实世界抽象出模型来表示业务场景了。   ...对于UML来说,我们最难的就是如何建模了! 首先要明确,建模的目的是什么?需要满足什么业务场景!其次,根据多种场景抽象出模型。   传统的方式可以通过自顶向下,或者自底向上的方式来进行。 ?

1.5K91

线上疑难定位:trying to use a recycled bitmap

一直有各种事情,很久没更新了,趁春节空档继续更新,分享一个线上疑难问题的排查过程 某个版本上线后,这个异常的量突然变大了,log如下 通过log,可以知道是imageview使用了被回收的bitmap...可以分成三个步骤 1、定位发生错误的activity 崩溃是发生在draw方法内部,draw方法一般都是在当前Activity可见的时候触发,就是onResume跟onPause的生命周期中,我们可以崩溃后台...imageview崩溃 可以崩溃堆栈入手,发现view的onDraw方法调用其实就是view的布局一步步调用下来的 通过上图的分析,可以知道崩溃imageview的布局层级关系,用图表示如下 可以通过...到这里应该可以基本确定异常的imageview了,如果还不行,继续看步骤3 3、准确定位异常imageview 如果上面的两个步骤,还是无法定位修复问题,可以继续看 比如发现有多个imageview都满足条件,如何进一步定位到具体崩溃的是哪个...Glide缓存模型,放下个章节继续说明,待续...

1K20

iOS的MVC框架之模型层的构建

一般的定位需求就是需要随时获取我的当前位置,并且我的当前位置更新后还需要实时的通知观察使用者;以及需要知道某个位置具体是在哪个国家哪个城市哪个街道等地标信息。...虽然我们不知道CLLocationManager的实现如何但是总是感觉这种多次调用的机制不是最优的解决方案。...我们知道当通过Delegate或者block时来设计业务层方法的回调时,可以很清楚的知道业务调用方法和实现机制的上下文,因为这些东西代码定义里面就已经固话了,而在使用这些方法时也很清楚的了解应该怎么使用某个方法...最后设计出类里面所提供的方法,因为模型层所提供的方法大都具有异步属性,因此要选择一个最合适的异步调用通知模型。...当然这些都只是我们进行业务模型层设计时所做的第一步,那么我们的业务模型内部的实现又应该如何进行设计和编码呢?我将会在后续的日子里面继续撰文来介绍如何一个业务模型层的一些具体方法和实践。

89320

C#简化让你懂得构建平台的第二定律

我们可以轻松想象B2B软件中出现的这种情况,其中每个客户都需要原始功能的某些自定义变体。 我们如何适应这些情况? ? 当然,最明显的方法是构建它!...因此,构建定制的问题可以概括为定义客户团队如何交互和影响拥有系统的团队的问题,从而影响系统的设计。 如果多个团队想要使用和扩展同一个系统,我们需要定义一个模型它们之间进行协调。...从某种意义上说,这种样式是多系统级别的OCP,与内部修改方法相比,具有明显的优势。 1.客户确切知道如何挂接到自定义行为,因为系统的设计使其变得明确。它们没有进入系统内部并被错误破坏的风险。...这就像能够告诉另一个微服务在哪个步骤要调用哪个API而无需修改其代码。 外部可编程性将系统的内部决策转换为开放接口,系统用户可以根据需要对其进行修改。...这些API允许客户端定义规则,该规则下应触发其特定的自定义以及应如何触发它们(执行对客户端系统的API调用)。 ?

29820

C++网络库都干了什么?

CppNet 是如何解决的。 首先,大家都知道操作系统原生的socket都是同步阻塞的,你每调用一次发送接口,线程就会阻塞在那里,直到将数据复制到了发送窗体。...有了 IOCP 和 epoll,我们调用网络接口的时候,要把这个过程或者干脆叫做任务,通知给事件触发模型,让操作系统来监控哪个 socket 数据发送完了,哪个 socket 有新数据接收了,然后再通知给我们...这就需要调用方完全知道自己需要什么功能的接口,然后将自己需要的接口声明一个公有的头文件里,定义时 CppNet 通过 __linux__ 宏在编译期选择不同的实现代码。...大家已经知道 epoll 和 IOCP 是不同模式的事件模型如何把 epoll 也封装成 Proactor 模式?这就需要要在 epoll 之上添加一个实际调用网络收发接口的干活儿层。...这么麻烦的事情当然还是交给操作系统来操作,和数据收发相同,我们也把监听 socket 放到事件触发模型里,但是,要放到哪个里呢?

2.1K50

深度学习Java之内存模型【译】

Java的内存模型定义了Java虚拟机如何和计算机物理内存进行交互。Java虚拟机是一体化的计算机模型,所以它自然也包含了内存模型。...线程堆栈记录了当前线程到达当前执行点所经历的一系列方法调用信息。暂且把它称之为【调用栈】。随着线程不停地执行代码,调用栈一直不停的改变。 线程栈记录了正在运行的调用栈里所有方法的局部变量信息。...无论这些被创建的对象是被赋值给了哪个局部变量还是挂在了某个对象的成员变量上,它们都存储堆里面。 下图展示了Java虚拟机里面的调用栈和局部变量以及存在堆里面的所有对象。...上面这张图可以使用下面的代码来表示 如果两个线程同时执行run方法,就呈现出了上面那张图。run方法调用methodOne,methodOne又调用methodTwo。...有些CPU可能会有多个缓存层,不过这不影响我们理解Java内存模型如何同内存进行交互的。我们只要知道CPU有这样一个缓存层就够了。

30610

携程的 Dubbo 之路,值得学习!

相信用过 Callback 的朋友们应该知道,foo 这个方法调用方式是正确的,而 bar 这个方法重复调用的时候是会报错的。因为对于同一个 Callback 接口,客户端只能创建一个实例。...站点服务器接受到回调数据时需要知道它对应的是哪个用户的哪次调用请求,这样才能把数据正确的推送给用户。但对于全局唯一的callback接口实例,想要拿到这个请求上下文信息就比较困难了。...服务端发起回调的时候也会带上这个 StreamID 。这样客户端就可以知道这次回调对应的是哪个 StreamContext 了。...并且我们 CDubbo 中通过 Filter 增加了一个内部的操作,$serviceMeta,把服务的元数据信息暴露出来。这部分元数据信息包括方法列表、各个方法的参数列表和参数的数据模型等等。...这样用户通过调用内部操作拿到这个数据模型之后,可以生成出一个基本的JSON结构。之后用户只需要在这个结构中填充实际的测试数据就可以很容易的构造出一个测试请求来。 ?

58410

携程的 Dubbo 之路

相信用过 Callback 的朋友们应该知道,foo 这个方法调用方式是正确的,而 bar 这个方法重复调用的时候是会报错的。因为对于同一个 Callback 接口,客户端只能创建一个实例。...站点服务器接受到回调数据时需要知道它对应的是哪个用户的哪次调用请求,这样才能把数据正确的推送给用户。但对于全局唯一的callback接口实例,想要拿到这个请求上下文信息就比较困难了。...服务端发起回调的时候也会带上这个 StreamID 。这样客户端就可以知道这次回调对应的是哪个 StreamContext 了。...并且我们 CDubbo 中通过 Filter 增加了一个内部的操作,$serviceMeta,把服务的元数据信息暴露出来。这部分元数据信息包括方法列表、各个方法的参数列表和参数的数据模型等等。...这样用户通过调用内部操作拿到这个数据模型之后,可以生成出一个基本的JSON结构。之后用户只需要在这个结构中填充实际的测试数据就可以很容易的构造出一个测试请求来。 ?

47830

干货 | 携程的 Dubbo 之路

相信用过 Callback 的朋友们应该知道,foo 这个方法调用方式是正确的,而 bar 这个方法重复调用的时候是会报错的。因为对于同一个 Callback 接口,客户端只能创建一个实例。...站点服务器接受到回调数据时,需要知道它对应的是哪个用户的哪次调用请求,这样才能把数据正确的推送给用户。但对于全局唯一的callback接口实例,想要拿到这个请求上下文信息就比较困难了。...服务端发起回调的时候也会带上这个 StreamID 。这样客户端就可以知道这次回调对应的是哪个 StreamContext 了。...并且我们 CDubbo 中通过 Filter 增加了一个内部的操作,$serviceMeta,把服务的元数据信息暴露出来。 这部分元数据信息包括方法列表、各个方法的参数列表和参数的数据模型等等。...这样用户通过调用内部操作拿到这个数据模型之后,可以生成出一个基本的JSON结构。之后用户只需要在这个结构中填充实际的测试数据就可以很容易的构造出一个测试请求来。 ?

76720

牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

如何实现透明传输。 8. 知道各个层使用的是哪个数据交换设备。(交换机、路由器、网关) 9. 路由表的内容。 10. 分组转发算法。 11. IP报文的格式,格式的各个字段的含义要理解。...Malloc内部调用A函数,A函数调用B函数。A和B分别是什么? 33. 内存映射文件的作用。主要函数。 34. 创建进程和打开进程用什么函数? 有什么区别? 35. 创建线程用什么函数?...执行>>和<<时进行的内部操作及其相应函数。 23. MFC的对话框的种类,各自怎么使用?及相关函数。 24. 定义对话框数据交换的步骤,及使用方法,实现原理。 25....如何忽略大小写? 如何查找不含该串的行? 17. Linux中进程有哪几种状态?ps显示出来的信息中,分别用什么符号表示的? 18. 怎么使一个命令在后台运行? 19....Selected、epoll模型、poll模型的区别。 26. 常用的socket选项有哪些?利用哪个函数来设置socket选项? 27. 怎么发送和设置带外(OOB)数据? 28.

2.4K41

iOS-RunTime,不再只是听说

对于OC语言,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有真正运行的时候才会根据函数的名称找到对应的函数来调用。...去方法的实现里面去实现。如图所示。 ? 运行时发送消息的底层实现 那么内部如何动态查找对应的方法的?...首先我们知道所有的类中都继承自NSObject类,NSObjcet中存在一个Class的isa指针。...} 交换方法内部实现: 根据SEL方法编号Method中找到方法,两个方法都找到 交换方法的实现,指针交叉指向。如图所示: ?...交换方法内部实现 注意:交换方法时候 xx_ccimageNamed方法中就不能再调用imageNamed方法了,因为调用imageNamed方法实质上相当于调用 xx_ccimageNamed

1.2K70

于振:如何使用工厂,进一步解耦领域对象的职责

比如我们去驾校学习如何开车,教练会告诉你如何发动汽车、哪个是油门、哪个是刹车。作为汽车的使用者,我们仅仅知道如何使用就好了,我想大部分人都不会去关心如何生产一辆汽车吧。...就像汽车的生产是工厂,而普通消费者只需要知道具体如何使用一样,领域中,工厂同样是为了将创建复杂对象的职责和复杂对象本身的职责,进行分离。...这些细节被封装到工厂方法里后,一方面减轻了客户负担,另一方面客户也不再需要了解模型具体的逻辑。 ▶︎ 确保不变条件得到满足 复杂的领域对象通常会有一些内部约束,这些约束我们称为不变条件。...,为什么最后还是需要调用 entity.NewEvaluation(...)呢?...最后,对 Validator/校验方法调用职责,就落到工厂的头上了,工厂在生成对象后,需要手动执行下校验方法

35810

每日一问(11) 什么是虚函数

别人都知道,我不知道 才是最尴尬的地方 C++通过指针实现了多态,运行时函数重载决议, 是他最有优秀地方,但是也是最让人痛苦地方, 内存模型假设存在 让对象生命周期管理更加复杂。...问题3:什么是move copy 标准库:如何使用 自定义一个类:如何使用 疑问:既然虚函数表,在编译时候确定了,并且放到只读数据段,问题来了,如果继承重写需要修改里面函数地址给怎办?..., 一个类可以创建多个对象 创建对象时,编译系统只为对象中的成员数据(成员变量)分配内存空间 而同类对象的成员函数的代码却是共享的。 内部的成员函数:普通函数:不占用内存。...只有对于通过指针或引用的方式调用虚函数才是间接调用 普通方法调用是直接将地址写在调用位置的,称作直接调用 ; 那在有了virtual关键字之后再通过指针或引用调用 时,编译器在编译时肯定不会直接写,...因为它需要查表才能知道调用哪个方法,所以称作间接调用 ,需要注意,只有通过指针或引用来调用才会发生间接调用 从汇编角度分析g++编译器如何实现虚函数动态绑定 g++ -S -g class_virtaul_fuc.cpp

46530

C++:类与对象(1)

类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。...Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?...只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参(所以this指针存在函数栈帧中),当对象调用成员函数时,将对象地址作为实参传递给this形参。...对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。...C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来 隐藏对象内部实现细节,控制哪些方法可以类外部直接被使用。

9310

【Java SE】类和对象

三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和printDate函数如何知道打印的是那个对象的数据呢?...4.2this引用的特性 this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型 this只能在"成员方法"中使用 "成员方法"中,this只能引用当前对象,不能再引用其他对象 this...)是一个特殊的成员方法,名字必须与类名相同,创建对象时,由编译器自动调用,并且整个对象的生命周期内只调用一次。...,因为非静态方法有this参数,静态方法调用时候无法传递this引用。...常量是程序编译的时候确定的,一旦初始化,就不能进行修改了。 3.实例内部类当中,如何访问外部类当中,相同的成员变量?

41320

最全的BAT大厂面试题整理

内部类的作用 抽象类和接口区别 抽象类的意义 抽象类与接口的应用场景 抽象类是否可以没有方法和属性?...修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法? Java中实现多态的机制是什么? 如何将一个Java对象序列化到文件里?...run()和start()方法区别 如何控制某个方法允许并发访问线程的个数? Java中wait和seelp方法的不同; 谈谈wait/notify关键字的理解 什么导致线程阻塞? 线程如何关闭?...Activity的四种启动模式对比 Activity状态保存于恢复 fragment各种情况下的生命周期 Fragment状态保存startActivityForResult是哪个类的方法什么情况下使用...如何在jni中注册native函数,有几种注册方式? Java如何调用c、c++语言? jni如何调用java层代码? 进程间通信的方式? Binder机制 简述IPC? 什么是AIDL?

1.1K20
领券