Tag: activerecord

Rails ActiveRecord和DB规范化

将可选的1:1属性分解为各自独立的模型有哪些优缺点。 例如,我刚刚遇到了这样的Rails代码: class Dogs << ActiveRecord::Base # :id (pk), :breed, :weight, :height, :tail_length end class DogSpotsInfo << ActiveRecord::Base # :dog_id (pk), :spot_color, :avg_spot_size, :num_spots end 但这就是我将如何做到这一点(必要时将spot字段保留为null): class Dogs << ActiveRecord::Base # :id, :breed, :weight, :height, :tail_length, :spot_color, :avg_spot_size, :num_spots end 在数据库级别,我认为唯一的区别是涉及可选属性的查询需要另一个连接吗? 前一种方法还有其他缺点吗? 有没有专业人士? 编辑: 我想在一张巨大的狗桌上,据说20%的狗有斑点,也许一个亲,前一种方法是更快的顺序扫描,但我不是100%肯定,如果这是唯一的亲,它似乎是过早的优化。 我能想到的另一个专业是它让模型更小更整洁。 但如果这是目标,也许你可以在不影响数据库结构的情况下通过使用像has_spots :spot这样的东西来做到这has_spots :spot ? 这里的最佳做法是什么?

schema.rb索引与单个迁移索引不同

我有这个用于我的迁移: class CreateCategories false end execute(‘CREATE UNIQUE INDEX ix_categories_root_title ON categories (title) WHERE parent_id IS NULL’) end def down drop_table :categories end end 但是当我偷看db / schema.rb时,我看到了这个: ActiveRecord::Schema.define(:version => 20110808161830) do create_table “categories”, :force => true do |t| t.integer “parent_id” t.string “title”, :null => false end add_index “categories”, [“title”], :name => “ix_categories_root_title”, :unique => true end […]

has_one:through => multiple

出席和担保: belongs_to :event belongs_to :account 因此:参加和保证之间的关系是1比1。 没有我太多的想法,有没有办法做到这一点? # attendment has_one :vouching :through => [:event, :account] 注意:实际上,我不介意想太多。

在ActiveRecord中断开

是否可以使用ActiveRecord named_scope来创建一个带有sql OR子句的查询? 我用的时候 Model.scope1.scope2 生成的查询是这些范围的结合。

ActiveRecord序列化将nil发送到当前属性的自定义序列化程序

我有以下自定义序列化程序: class ReportCardDataSerializer def self.dump(hash) hash.to_json end def self.load(json) # json.class == NilClass, why???? hash = (json || {}).with_indifferent_access end end 以下类具有序列化data属性,数据库列设置为NOT NULL。 class ReportCardGroup < ActiveRecord::Base serialize :data, ReportCardDataSerializer # data is PostgreSQL jsonb column end ReportCardDataSerializer dump方法按预期工作。 但是在尝试load ReportCardDataSerializer时,即使数据库列不是nil, load方法也会被发送为nil。 为什么会这样?

没有gem的导轨分页

我的任务是为没有使用gem的Rails项目创建“前10个”,“下10个”,“最新”和“最旧”的链接。 在控制器中,我可以在表格中显示第一个(最新的)10个项目: … before_action :set_page, only: [:index] … def index @rows = Row.order(created_at:).limit(10) end … private def set_page @page = params[:page] || 0 end … 但是,我不相信这会正确设置每个10页的新页面,因为我无法更改页码(hxxp:// …?page = 1)以获得下一组10。 我已经尝试了我能找到的几页说明,包括: 没有gem的Paginate Next,Previous,Name.order(:id).limit(10).offset(0)的按钮 https://solidfoundationwebdev.com/blog/posts/next-and-previous-links-in-rails 任何方向都非常感谢。 至于第二个示例站点,我有两个模型类: ApplicationRecord <ActiveRecord :: Base 行<ApplicationRecord 看来我应该编辑: Row <ActiveRecord :: Base 但不知道在哪里找到/我应该如何添加它。 感谢您对初学者问题的耐心。 供参考,erb文件链接格式:

Ruby on Rails Active Record RANDOM()在循环中始终相同

为什么这会重复输出相同的记录ID,何时应该在每个循环迭代中抓取一个随机记录? count = 0 while count < 20 puts "ID: " + SomeModel.where(assoc_id: 10).order("RANDOM()").limit(1).first.id.to_s count += 1 end 输出: ID: 82784 ID: 82784 ID: 82784 ID: 82784 ID: 82784 我已经确保查询有足够的记录(即超过1)。 在控制台中,行本身(在循环之外)每次都会返回一个新的ID,因此它与循环有关。 我不明白的是什么?

包含,选择,排序,限制多个模型(单个查询)

我需要创建一个包含以下表中数据的查询: *对话 :在用户之间对消息进行分组的模型 class Conversation :conversation_participants ## Attributes title, created_at, updated_at end * ConversationParticipant :跟踪对话用户的模型 class ConversationParticipant < ActiveRecord::Base ## Associations belongs_to :conversation belongs_to :user ## Attributes conversation_id, user_id, seen, created_at, updated_at end *消息 :保持跟踪内容和发件人的模型 class Message “User” ## Attributes sender_id, content, conversation_id, created_at, updated_at end *用户 :具有属性name的模型 如何在单个查询中获取以下内容? (5)来自uniq Conversation 消息的最近消息的限制 来自ConversationParticipant的 user_id = […]

find_by_sql呈现一个数组

我在这里遇到了一些问题,我无法使我的find_by_sql请求呈现ActiveRecord关系。 实际上,我需要一个activerecord关系来提出新的请求: @searches = @searches.find_by_sql(‘SELECT *, COUNT( follower_id ) FROM follows GROUP BY followable_id LIMIT 0 , 3′) if params[:only_famous_projects] @project_pages = @project_pages.where(:project_id => @searches.pluck(:’followable.id’)) if params[:only_famous_projects] 没有activerecord关系,我不能使用“pluck”。 因此,我认为我必须将我的sql请求转换为Activerecord请求。 但是,只要我在ActiveRecord上使用“count”,我就会遇到一个很大的问题:我最终没有ActiveRecord关系,而是一个FixNum! 我不知道在哪里可以找到答案,如果你能帮助我,我将非常感激。 谢谢

将SQL文件导入Rails 4 ActiveRecord db?

我在这里看了几个其他的问题,它们模糊地相似,但不完全是我正在寻找的。 我要做的是导入/“转换”一个* .sql文件,其中包含8个表,每个表包含大约24列。 这个文件实际上是相当扁平的文件,看起来好像以前唯一有效的查询与关联表之间的共享:id(因此,SELECT * FROM table1,table2 WHERE id =’1’会拉出所有结果,这是当时很好)。 我已经四处寻找,但找不到一个聪明的方法来做到这一点,所以我现在请求Rails专业人员寻求帮助。