Tag: activerecord

在rails中为has_many自联接定义表名?

我希望设置嵌套的注释,并希望使用自联接来设置它。 class Comment ‘Comment’ #… end 现在,我将使用什么sql表结构来设置has_many自连接? 我假设这样的事情: comment_to_comments: parent_id integer child_id integer 如何告诉rails使用此表? 如何告诉rails parent_id是到达父级的外键,child_id是到达子级的外键?

输入字段方法(text_area,text_field等)如何从form_for块中的记录中获取属性值?

我有一个标准的Rails 2.3.5应用程序和一个名为Post的模型。 Post有一个名为url的属性,并定义了以下getter: def url p = ‘http://’ u = self[:url] u.starts_with?(p) ? u : “#{p}#{u}” end 如果我加载script/console ,我可以执行Post.first.url并获得所需的结果(例如,如果属性的真值是foo.com,则返回http://foo.com ) 但是,如果我有一个form_for块,并执行类似form.text_field :url ,它将不会返回带有http:// form.text_field :url的url; 相反,它只是返回foo.com form_for如何在ActiveRecord模型上访问属性? 它似乎绕过任何超载的getter。

在高度并发的Rails系统中处理瞬态数据库错误的“最佳实践”是什么?

在研究死锁问题时,我发现了以下post: https://rails.lighthouseapp.com/projects/8994/tickets/6596 它的要点如下: MySQL文档说: 死锁是事务数据库中的一个典型问题,但它们并不危险,除非它们如此频繁以至于根本无法运行某些事务。 通常, 您必须编写应用程序,以便在由于死锁而回滚时,它们始终准备重新发出事务 。 因此,调试瞬态死锁是一种反模式,因为MySQL认为它们是可行且不可避免的。 因此,Rails应该为我们提供一种方法,因为它: 假设存在“最佳”的做事方式,并且它旨在鼓励这种方式 但是Rails并没有为我们提供一种方式,所以我们使用的是一种hacky DIY的东西。 所以如果所有这些都是真的,那么Rails解决方案在哪里? 注意:此项目处于非活动状态,但似乎很简单,可以作为解决方案。 为什么Rails没有这样的东西? https://github.com/qertoip/transaction_retry

XML序列化在Rails模型的datetime字段中不包括毫秒

默认情况下,正在转换数据库中的datetime字段并删除毫秒: some_datetime =>“2009-11-11T02:19:36Z” attribute_before_type_cast(’some_datetime’)=>“2009-11-11 02:19:36.145” 如果我尝试覆盖此属性的访问器,如: def some_datetime attribute_before_type_cast(‘some_datetime’) end 当我为该模型尝试“to_xml”时,我收到以下错误: NoMethodError(未定义的方法`xmlschema’代表“2009-11-11 02:19:36.145”:String): 我试图将String解析为Time对象但是不能得到一个包含毫秒; def some_datetime Time.parse(attribute_before_type_cast(‘some_datetime’).sub(/\s/,”T”).sub(/$/,”Z”)) end 任何人都可以帮助获得由to_xml呈现毫秒的日期时间吗?

SQL查询和ActiveRecord.find_by_sql如何返回不同的结果?

我有一个难题。 我在我的Account类上编写了一个范围,它找到了一堆符合冗长条件的帐户对象。 这是我的范围: scope :unverified_with_no_associations, -> { find_by_sql(“SELECT COUNT(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 (SELECT DISTINCT(account_id) FROM […]

使用Rails 5,如何在创建新用户后添加数据库记录?

在我的应用程序中,我有帐户,用户和权限。 创建新用户时,我已经自动创建了一个帐户记录,并在Account表中将新的User foreign_key设置为“owner_id”。 在完成此操作的同时,我想在我的Permissions表中添加一条记录,其中新的account_id和新的user_id设置在各自的列中,资源列设置为“Account”,角色列设置为“owner” ”。 以下是我的模型的外观: account.rb class Account < ApplicationRecord belongs_to :owner, class_name: "User" has_many :permissions end user.rb class User < ApplicationRecord … has_one :account, foreign_key: "owner_id" has_many :permissions after_initialize :set_account … private def set_account build_account unless account.present? end end permissions.rb class Permission < ApplicationRecord belongs_to :account belongs_to :user end 我希望通过将“set_account”修改为以下内容至少会填充Permissions表的account_id和user_id列,但是我得到一个“未定义的局部变量或方法’build_permission’错误。 def set_account build_account […]

Rails在哪里或选择查询链接

所以在查询数据库时,我知道在初始查询中使用的where要好得多,如下所示: pending = Request.where(“status = ?”, “Pending”).order! ‘created_at DESC’ 但是,如果我需要进一步过滤此信息,我可以使用where或select : high_p = pending.where(“priority = ?”, “High Priority”) normal_p = pending.where(“priority = ?”, “Priority”) 要么 high_p = pending.select{|x| x.priority == “High Priority”} normal_p = pending.select{|x| x.priority == “Priority”} 我的问题是,从绩效的角度来看,哪一项更好? 我们应该总是where使用? 或者,当没有搜索整个数据库时, select是否有用例?

您将如何使用rails和ActiveRecord中的引用和引用对文章进行建模?

一篇文章引用了许多文章,许多其他文章也可以引用它。 有时,文章可以引用也引用它的文章。

Activerecord:获取特定列和关联的关联计数

好吧,所以我们的Accounts有很多具有很多Impressions Schedules 。 我想获取Accounts.name ,所有Accounts.schedules ,但只获取Accounts.schedules.date , Accounts.schedules.summary以及Accounts.schedules.summary的数量。 这里是一个可视化的我想要给一个帐户(我想要所有帐户) Account: .name Schedules .date .summary count(Schedule.impressions) 以下是查询过多的代码 Account.find_each do |account| puts a.name # Account.name a.schedules.each do |schedule| puts schedule.date # Account.schedule.date puts schedule.summary # Account.schedule.summary puts schedule.impressions.count # Count(Account.schedule.impressions) 我想在尽可能少的查询中做到这一点,也许也可以学到一些东西! 我喜欢效率和优化。

防止重复保存在活动记录中,并返回重复的对象

我在我的数据库中存在一些重复记录的问题,我认为这是由人们多次点击提交引起的。 我正在使用Rails 3。 返回重复的对象而不是false 我希望能够防止将重复项添加到我的数据库中,但是如果在保存副本时返回了重复的对象而不是false,则更愿意。 原因是如果有人多次点击提交,我希望他们被带到一个页面,显示他们首先提交的项目,而不是错误页面。 重复的定义 我将副本定义为一个项目,其中除ID之外的所有字段都相同,并且created_at> Time.now – 1.minute 没有JavaScript 我宁愿做这个服务器端,而不是仅仅禁用JavaScript中的按钮,因为我不认为数据库完整性是客户端工作。 此外,感觉它应该在模型中完成,而不是控制器。 我正在运行多个乘客,所以任何解决方案都应该尽可能地避免并发问题。 一些边缘案例重复不会打破网站。 谢谢。