Tag: activerecord

ActiveRecord是否使用命名约定“ID”为每个表分配密钥,如果是,为什么?

我的理解是,Actice Record基于Martin Fowler在他的“企业应用程序架构模式”(Addison-Wesley,2002)一书中描述的对象 – 关系映射(ORM)模式。 这表明数据库记录与在面向对象的程序(OOP)中表示它的对象之间存在一对一的映射关系。 当Rails创建者David Heinemeier试图为他的Rails框架实现ORM时,他将其基于Fowler的模式。 这就是问题,ActiveRecord是否使用命名约定“ID”为每个表分配代理主键,如果是,为什么? 我问的原因是,使用命名约定“tablename_ID”分配一个代理主键似乎更有意义; 事实上,在创建外键时,ActiveRecord会出现这种情况。 此外,是否可以覆盖默认配置,并使用命名约定“tablename_ID”分配代理主键; 因为特别是在主键的情况下,最好不要使用共享名称,因为如果只是查看列名称,则无法识别两列ID之间的区别:ID,ID,ID。 作为一个用例示例出现这种情况会出现问题,如果我将数据从两个表导出到一个表中,则会有两个具有ID名称的列; 当我用更新导入该文档时,似乎默认情况下无法映射ID列。

Rails搜索多个条件(如果值不为空)

假设我有一个带有字段word_count的模型Book ,可能还有很多其他类似字段。 在数据库的“高级搜索”中将条件串在一起的好方法是什么? 在上面的例子中,我有一个搜索表单,其中包含“ word count between ___ and ___ ”框。 如果用户填写第一个框,那么我想要返回字数大于该值的所有图书; 同样,如果用户填写第二个框,那么我想要返回字数少于该值的所有书籍。 如果两个值都填入,那么我想返回该范围内的字数。 显然,如果我这样做 Book.where(:word_count => ..) 如果只填写其中一个字段,这将会中断。有没有办法优雅地处理这个问题? 请记住,可能存在许多类似的搜索条件,因此我不想为每种可能的组合构建单独的查询。 很抱歉,如果之前已经提出此问题,但搜索网站尚未产生任何有用的结果。

由于未知OID被视为String,ActiveRecord和SQL不会返回相同结果的情况

我有个问题。 之前我发布了一个类似的问题,我要问的是哪个问题得到解答,可以在这里找到上下文ActiveRecord Count和SQL计数不匹配 这个问题与计算查询结果有关。 在这个问题中,我得到了不同的对象结果,而不是没有得到相同的计数结果。 这是ActiveRecord代码: scope :unverified_with_no_associations, -> { find_by_sql(“SELECT DISTINCT(accounts.id, accounts.email) FROM accounts WHERE level = 0 AND id NOT IN (SELECT DISTINCT(account_id) FROM verifications) AND id NOT IN (SELECT DISTINCT(account_id) FROM positions) AND id NOT IN (SELECT DISTINCT(account_id) FROM edits) AND id NOT IN (SELECT DISTINCT(account_id) FROM posts) AND id NOT IN […]

在React迭代中显示最后一个子节点

我正在尝试实现一个消息应用程序,暂时没有ActionCable。 当我映射所有邮件时,我只想显示来自该用户的最后一条消息:我只显示最后一条消息,而不是显示来自用户的所有消息。 我不知道如何实现这一目标。 我以为我可以将key设置为user_id而不是id 。 _messagesRender: function(){ var messages = this.props.message.map( function(m, i){ return( {m.body} ) }); return( {messages.length === 0 ? “No messages” : messages} ) }, 这个组件在索引页面上,我正在尝试创建一个类似消息的应用程序。 任何与React的指针? Rails 5用作后端。 警告:flattenChildren(…):遇到两个孩子用同一把钥匙, .$2 。 子键必须是唯一的; 当两个孩子共用一把钥匙时,只会使用第一个孩子。 后端: @messages = Message.where(to: current_user.id) 消息模型:: :id, :to, :user_id, :body user_id是发送/创建消息的人。

belongs_to has_one结构

我有一个具有以下特点的应用程序 There are Clubs Each Club has Teams Each Team has Players 我有一个用户表。 用户表基本上包含俱乐部经理,团队经理和登录系统的玩家的用户名和密码。 我应该如何构建模型和表格? 我打算为俱乐部,团队和球员创建表格。 但我不确定show是否构建了它们与users表之间的关系。 我可以在每个模型中创建user_id ,但关系将是Club belongs_to User ,这似乎不对。 此外,我最终会得到一个具有以下内容的用户模型 has_one :club has_one :team has_one :player 哪个不对。 用户在任何给定时间只能拥有其中一个。 有没有更好的方法来构建它?

是否可以有条件地允许嵌套属性?

我有一个大表单,最终创建一个用户帐户,并完成其部分配置文件。 所以, User belongs_to Profile 。 问题是,我想将配置文件设置为嵌套属性,但仅限于此表单。 User模型的所有其他表单不应允许为配置文件发送嵌套属性。 这可能吗? 怎么样?

我可以在ActiveRecord(或Mongoid)中为数据库连接和table_name配置线程安全的每个请求配置吗?

又称<> 环境 我的应用程序是这样建模的: user has_many databases database has_many tables table has_many rows row habtm(+value) columns 你明白了! 因此,我希望不是在数据库内建模数据库,而是: 一个包含用户和的用户的sqlite3数据库 每个用户都有许多sqlite数据库 每个用户都会在他的数据库中LCRUD他的表(类似于phpmyadmin) 问题 我想为数据库连接和table_name提供线程安全的每请求配置 class Table < ActiveRecord::Base end # in some controller # set the connection to the user-selected database from some DB list Table.connection = current_user.session.connection # set the name to the user-selected table from […]

如何根据子类的属性对父类进行排序?

我有一个简单的要求:我想根据子类的属性对父类进行排序。 class owner has_many :tasks end class task belongs_to :owner end 现在我想根据任务的截止日期对所有者进行排序,以便具有“最接近”截止日期的任务的所有者是第一个,等等 我可以用Ruby进行数组排序,但是我的记录集很大,我需要用AR / DBMS来做这个。 更新: 正如我在思考这个问题时,我想到了解决方案的一部分,尽管我不知道如何在AR中实现。 要根据所有者的任务对所有者进行排序,只有一个任务(每个所有者)是相关的,即具有最接近截止日期的任务。 我如何使用AR来获取所有所有者,按其最接近的截止日期排序? 更新2: Task.order(“due_date DESC”).maximum(“due_date”, :group => ‘owner’) 实际上会给我所有者对象,按照正确的顺序排序为有序哈希的一部分([owner] =>“due_date”)。 万岁! 现在唯一的问题是,如何告诉AR使用所有者对象eager_load所有相关任务。 因为此时我每次打电话都会发出一个查询 owner.tasks.each do |t| 在我看来。 任何帮助表示赞赏,我对此(简单?)问题感到困惑, 欧文

使ActiveRecord连接模型属性在查询结果中可用

鉴于User和Book模型,我创建了一个包含其他属性的连接模型ViewedBook。 以下是我提出的内容的本质: create_table “users” t.string “username” end create_table “books” t.string “title” t.integer “user_id” t.date “authored_date” end create_table “books_viewings” t.integer “book_id” t.integer “user_id” t.boolean “finished” t.date “last_viewed_date” end class User belongs_to :book_viewing has_many :authored_books, :class_name => “Book”, :source => :book has_many :book_viewings has_many :viewed_books :through => :book_viewings :order => “book_viewings.last_viewed_date DESC” has_many :finished_books :through => :book_viewings […]

关于Rails中正确关联的问题

以这种情况为例。 你有3个型号: 诗人 – 代表一首诗的作者 诗 – 代表诗人写的一首诗 打印 – 表示包含诗人诗歌的任何类型的印刷出版物。 蝙蝠诗人和诗歌是显而易见的: 诗人有很多诗 诗歌belongs_to诗人 在处理Printing模型时,我会感到困惑。 在这种情况下,印刷在某种意义上属于诗人和诗。 你可以说一个诗人has_many印刷品或诗歌has_many印刷这是有道理的,但走向相反的路线是棘手的… 一些杂志或书籍从一位诗人那里打出5首诗的情况怎么样? 或者,其中一首诗出版在10种不同的杂志上? 几乎看起来印刷本身“属于许多”诗歌或诗人。 我知道这是错的,但我只想说清楚这一点。 所以可回答的问题是:你将如何建立这些关系? 具体来说,模型和数据库表的外观如何?如何使用它们来访问关联数据? 谢谢!