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

为什么在使用new/save而不是create时,has_many到的连接表没有在rails中创建?

在Rails中,使用has_many关联时,连接表不会在数据库中自动创建的原因是因为Rails默认使用的是惯例优于配置的原则。当我们使用has_many关联时,Rails会假设我们已经手动创建了连接表,并且会根据命名规范去查找对应的表名。

具体来说,Rails会根据关联的两个模型的名称来生成连接表的名称。例如,如果我们有两个模型UserRole,并且在User模型中使用了has_many :roles关联,Rails会默认去查找名为roles_users的连接表。这个表名是根据关联的两个模型的名称按照字母顺序生成的。

因此,如果我们想要使用new/save而不是create来创建关联对象,我们需要手动创建连接表。可以通过Rails的数据库迁移功能来创建连接表。具体步骤如下:

  1. 创建一个新的数据库迁移文件,可以使用以下命令:
  2. 创建一个新的数据库迁移文件,可以使用以下命令:
  3. 在生成的迁移文件中,使用create_join_table方法来创建连接表,例如:
  4. 在生成的迁移文件中,使用create_join_table方法来创建连接表,例如:
  5. 运行数据库迁移命令,创建连接表:
  6. 运行数据库迁移命令,创建连接表:

这样,通过手动创建连接表,我们就可以在使用new/save方法创建关联对象时,正确地保存关联关系到数据库中了。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法提供相关链接。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

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

相关·内容

Rust Web 生态观察| SeaORM :要做 Rust 版本 ActiveRecord

“Active Record ,是一种领域模型模式,特点是一个模型类对应关系型数据库一个模型类一个实例对应一行记录。...它并不是 Ruby on Rails 首创,而是由 Martin Fowler 《企业应用架构模式》一书中提出。...而以 _id后缀字段作为外键。 自动生成 find_by_id 之类查询方法。 以 created_at 和 updated_at 创建和更新记录时候,自动设置时间戳。...如果你没有使用 Rails 和 ActiveRecord 经验,也没有关系。...SeaQuery SeaQuery是一个查询生成器,是 SeaORM基础,用来Rust构建动态SQL查询,使用一个符合人体工程学 API 将表达式、查询和模式构建为抽象语法树(AST)。

9.8K20

使用Ruby on Rails和Bootstrap开发社交网络平台详细教程

在这篇博客,我们将深入介绍如何使用Ruby on Rails(RoR)框架和Bootstrap前端框架共同开发一个简单功能丰富社交网络平台。...Ruby on Rails提供了强大后端支持,Bootstrap则提供了灵活前端组件,使得我们可以轻松创建现代化用户界面。...你可以使用以下命令进行安装:gem install rails步骤2:创建Rails应用使用以下命令终端创建一个新Rails应用:rails new social_network然后进入应用目录:...cd social_network步骤3:配置数据库config/database.yml配置你数据库连接,例如使用SQLite:default: &default adapter: sqlite3...:使用Bootstrap创建界面app/views/layouts/application.html.erb添加Bootstrap样式链接:<!

15810

架构之美:教你如何分析一个接口?

相信没有人能把所有接口细节记住, 如何才能理清繁杂接口呢? 找主线,看风格。 找主线,你需要找到一条功能主线,建立起对这个项目结构性认知,不是一上来就把精力放在每个接口细节。...你对细节部分了解会随着你对项目的深入逐渐增加。而有了主线,就有着力点,可不断深入。 但要学习不只是这些接口用法,要想从项目接口设计上学到更多,就需要关注它所引导风格。 为什么要看风格?...REST刚出来时候,开发者普遍觉得这是一个好想法,但怎么落地呢?没有几个人想得清楚。 Rails对REST使用方式做了一个约定。...:format) articles#create new_article GET /articles/new(.... Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现Rails会替你自动实现。

2.2K20

我发现了一个非常酷软件,用自然语言编程!

“Ruby on Rails(简称)Active Record是DSL一个典型。” “又一个新词!什么是Active Record? ” 隔着屏幕,我都能感受到张大胖有点儿不满。...#创建一个Author对象author = Author.new(name: "Andy")#创建一个Book对象,这个对象和Author是关联book = author.books.create(title...RoRActiveRecord相当于一个ORM领域DSL,对吧?” “可以这么说,你看,这DSL是不是很有用,可以让我们抛弃细节,一个更高层面的编程,能极大地提升编程效率。...RoR刚诞生时候,号称比Java编程快10倍呢!” DSL实现 “对了,你也可以发掘下你工作领域,看看有没有可能创建一个属于自己DSL。但是我必须得提醒你,不能为了DSLDSL。”...“还有一种办法就是‘寄生’别的语言中,利用别的语言(Ruby ,Python)动态特性,构建你自己语法,像刚才has_many就是这么做,这种方式叫做内部DSL。” "好麻烦!"

87720

Yii数据库操作方法指南

} // 设置前缀,使用 CDbConnection::tablePrefix 属性配置文件设置 //  // Yii实现了把一条完整SQL语句完完全全肢解能力,比如这样: $user =...// Active Record // 使用AR以面向对象方式访问数据库,AR实现了ORM技术 // 当Post类表示tbl_post,我们可以使用这样方式插入一条数据 $post = new...AR最典型功能就是执行CRUD操作 // DAO定位于解决复杂数据库查询,AR定位于解决简单数据库查询 // 一个AR类代表一张数据一个AR对象代表表一行真实记录,AR类继承CActiveRecord...AR类一个属性表示,如果试图通过属性访问没有字段,将会抛出一个异常。...'id' 是关联一个字段,但他不是主键,现在将它指定为主键 } // 实例化一个AR,填写信息(类似于填充用户提交信息),然后保存 $post = new Post; $post->title

1.5K70

不是 Ruby,而是你数据库

然而,现代软件典型用例,内存使用并不明显:客户与服务器软件交互时会感到缓慢,但并不会直接体验内存使用。然而,不深入探讨这个问题主要原因是对内存进行基准测试相当复杂。...其中一个 Rails 问题是它与数据库高度耦合(也可以说是一种好处)。Rails 专注于掌控数据库一切。没有数据库,Rails 将毫无用处,甚至可能阻碍工作进展,不是提供帮助 [2]。...它可能会“突然地、神奇地、动态地”开始构建其他连接和查询,从而降低性能。(好吧,不是从一分钟下一分钟运行时,而是经过小更改)。...我们没有看到这一点,因为开发和测试,性能从未下降。但我们应该注意是,这种错误代码库中比比皆是。...而且它会查询五个连接并且连接到至少一个索引上,而这个索引并不是为此准备。导致大约 800 毫秒查询。每次页面加载。 未优化 where、group 和 order 调用。

10730

GitHub 关系型数据库垂直分库实践

十多年前,与当时大多数 Web 应用程序一样,GitHub 也是一个使用 Ruby on Rails 开发网站,它大部分数据都保存在 MySQL 数据库。...另一种比较有挑战性情况是 has_many :through 关系导致需要连接来自不同模式领域。...应用层进行数据连接不是在数据库层,这也是一种常见解决方案。...我们 Kubernetes 集群上部署了 Vitess VTGate。应用程序连接到这些 VTGate 端点上,不是直接连接到 MySQL。...另外,因为部署拓扑问题和需要提供读己之所写(Read-Your-Write)支持,我们并没有在所有地方都使用 Vitess 作为迁移数据库工具,但我们预计未来会将它作为数据迁移主要工具。

1.5K11

重新温习软件设计之路(2)

间,我们开始怀疑人生,这是我该做事儿吗? 其实,我们开始创建对象时候,就出现了问题。...比如ASP.NET CoreDI容器,它封装了对象创建和组装工作,我们已经对它工作没有感知了。...比如,从Rails对外暴露REST接口设计,可以看到,它对REST使用方式做了一个约定,只要遵循Rails习惯写法,写出来结果就基本上符合REST规范。...又如,从Rails程序员编写API接口设计,可以发现它十分关注API表达性,可以很方便地表达一对多关系: class Article < ApplicationRecord has_many...{ get; set; } ... } 而这样风格,并没有错,只是无法很直白表现出一对多关系,Railshas_many”表达地更加直白。

80530

Active Record基础

对象关系映射: ORM是一种技术手段,把应用对象和关系型数据库数据连接起来,使用ORM,应用对象属性和对象之间关系可以通过一种简单额方法从数据库获取,无需直接编写SQL语句,也不过度依赖特定数据库种类...Active Record 约定 命名约定 Rails把模型类名转换为复数,然后查找对应数据Rails提供单复数转换功能非常强大,类名应该使用驼峰命名: ?...创建模型关联后,Active Record 会查找这个字段。 主键: 默认情况下,使用证整数字段id作为主键。...Product < ApplicationRecord end 如果应用需要使用其他命名约定,或者 Rails使用已有的数据库,则可以覆盖默认命名约定,如修改名和主键名: class...创建记录并存入数据库 user = User.create(name: "huruji", age: 12) 实例化,但不保存 user = User.new 调用save实例方法可以保存 user.save

3.2K20

Active Record 数据验证

数据验证概览 为什么要做数据验证 数据验证确保只有有效数据才能存入数据库,模型做验证是最有保障,只有通过验证数据才能存入数据库。...,一种在数据库中有对应记录,一种没有,新建对象还不属于数据库,只有调用了 save 方法后,才会存入数据库,可以使用 new_record?...,这个方法不会在数据库创建唯一性约束,所以有可能两次数据库连接创建记录具有相同值,所以最好在数据库字段上建立唯一性约束。...on: :create :只创建验证 on: :update:只更新验证 class Person < ApplicationRecord # 更新允许电子邮件地址重复...validates :email, uniqueness: true, on: :create # 创建记录允许年龄不是数字 validates :age, numericality: true

1.4K20

GitLab 任意文件读取漏洞 (CVE-2016-9086) 和任意用户 token 泄露漏洞

2.服务器根据Project.json文件创建一个新项目,并将对应项目文件拷贝服务器上对应位置。...在这里,我们可以再次使用软链接使变量json获取到任意文件内容,但是由于获取文件不是json格式,无法decode,导致异常抛出,最终在前端显示出任意文件内容。...任意用户authentication_token泄露漏洞 复现步骤为: 1.注册一个普通用户,创建一个新项目 2.项目的member选项,添加管理员项目中。 ?...,所以create_model_value()执行parse_hash(),parse_hash()parsed_hash被改变,但是create_model_value()函数parsed_hash...不会变,这就造成了parse_hash()这个函数执行后create_model_value()parsed_hash这个值并没有改变。

2.5K70

Rails路由

用于生成路径和URL地址辅助方法 创建资源路由,会同时创建多个可以控制器中使用辅助方法,如上面的资源路由会创建以下方法: photos_path:返回值为 /photos new_photos_path...有时候复数资源希望能够不使用ID就能查找资源,如显示当前登录用户信息: get 'profile', to: 'users#show' 如果 get 方法to选项值是字符串,那么这个字符串应该使用...方法,可以传入Magazine和Ad实例,不只是数字ID: 还可以使用...当然使用 link_to 等辅助方法,可以只指定对象,不必完整调用 url_for 方法: <%= link_to...和 edit 动作上 限制创建路由 Rails 默认会为每个 REST 式路由创建7个默认动作,可以使用 :only 和 :except 选项来微调此行为。

4.4K20

不要让框架控制你项目,过度依赖框架会害了你

而你只能像一只忠实小狗一样默默跟随。 我敢肯定,大多数框架创始人对用户没有任何敌意,他们发自真心关心用户,DHH肯定也希望用户使用Rails感受到快乐。...但是,这些创始人更关心是有多少用户愿意使用框架,并一路相随,不是你能否接下来十五、二十年内继续创造价值。...我们使用这些代码,并随着时间推移,将我们代码更加紧密地耦合到框架。直到我们代码完全依赖于框架。 所以人们常说,框架内开发软件,不是利用框架开发软件,因为你确实是框架构建项目。...MVC模型,M是存储,V是模板,C是HTTP层,却没有提供一个统一、合乎逻辑地方来保存逻辑和领域代码。框架鼓励我们将这些代码放在最近地方,不是最方便维护地方。...框架开发软件,类似于如下情况并不少见: def create if User.exists?

73730

数据挖掘工程师:如何通过百度地图API抓取建筑物周边位置、房价信息

前提是rails服务器里已经有相应房屋数据,如房屋街道地址,小区名字等. 接下来需要做就是为周边信息数据建以及相应关联(因为它们为多对多关系) ?...2.流程详解 js代码在用户浏览器执行,因此爬取主要部分逻辑都需要写在js脚本里,rails服务器端需要完成是获得当前需要抓取房屋数据以及储存js抓取数据。...(如地铁,医院等),查询结果后立即向服务器发送查询结果以及房屋信息,并标记当前数据类型(地铁,医院..).服务器接收到数据后,先判断数据类型,然后根据类别再对房屋周边信息进行储存....bus=obj.new(name: attr[0], longitude: attr[1], latitude: attr[2]) bus.save end asso_obj.create...爬取后导入rails数据库,就可以使用上面的方法便利抓取地理位置信息。

3.9K90

使用rails实现最简单CRUD

创建rails项目 以blog项目为例: rails new blog 只需几秒钟就会得到一个基本rails项目结构: ?...视图文件,将视图文件写入以下内容 hello, rails 此时,浏览器打开 / 和 /hello/index/ 路径都将返回同样内容 ?...使用以下命令生成控制器: rails generate controller Articles 配置articles路由: resources :articles 使用 rails routes 命令查看当前路由配置...按照上文中方法创建new.html.erb 文件和 new 方法, new.html.erb 文件写入: new article <%= form_with(scope:...此时我们需要定义提交之后处理路径,从上面的路由配置我们可以知道对应于 create 方法 def create @article = Article.new(article_params)

3.1K40

rails, django, phoenix,你们错了

test 顺着 framework 思路,我们不知不觉地做了一些假设: 所有的状态都是存储一个或者若干个 database 如果某个 database 没有 framework adapter...,那么我们就无法使用 数据是强耦合,比如 User 和 Content 间有一张 enroll 作为用户注册哪个课程凭证 一个 controller 可以跨越多个 model 获取数据,并提供给某个...然而,业务层被这样揉进了一个 web framework ,是不是哪里不太对劲? rails 们代表 web 层并不是业务全部。如果哪天我们要向第三方提供 API 呢?...User model 甚至不该看见 Content model,也看不见作为连接 enroll 。 这是横向解耦。...这些所有的前端基本都没有所谓 model,因为数据存储各个服务解决了。 如此这般,我们打破了上述假设,数据变得弱耦合,每个服务有各自独立数据,它们只是需要时候被组装起来。

1.8K70

为什么 Laravel 这么优秀?

比如你在上一次变更操作错误设置了某个索引,那我理解正确做法不是回滚,而是创建一个新迁移文件,并在新迁移文件 ALTER 之前修改。...to use pest 家务:切换到使用害虫 add testing for create course endpoint 为创建课程终点添加测试 我们知道进行数据操作前,都需要先对数据进行校验。...put($key, $value, $seconds); } 使用 Cache ,我们基本不用关心到底用是文件缓存还是 Redis 缓存;使用队列也不用关心用是 sync 队列还是专业...container 设置不同值;如 CacheServiceProvider 会向容器中注册 Cache 对象,后续使用 Cache::get 使用是这里注册 Cache 对象,注册阶段不应该向容器获取值...,完成开发选择自己以及团队合适不是只会写 Java 就觉得其他语言啥都不是

14310
领券