Tag: activerecord

GROUP_BY内的活动记录限制

SCENARIO我有一张桌子,上面有一张带有用户表的post。 我希望能够获取所有post并将其分组给用户,但我想为每个用户设置10个限制。 class Post < ActiveRecord::Base belongs_to :user end class User 10).group_by(&:user) 有什么想法吗? 我是否必须编写自定义SQL,或者Active Record可以执行此操作吗?

在Rails 4中的has_and_belongs_to_many关系中使用uniq

我正在尝试在has_and_belongs_to_many关系上实现一个唯一约束,如下所示: class User has_and_belongs_to_many :foos, uniq: true end 因为我在调用foos时只想要独特的foos ,所以我添加了uniq选项。 自升级到Rails 4以来,我开始收到以下警告: 弃用警告:不推荐使用User.has_and_belongs_to_many:foos声明中的以下选项:: uniq。 请改用示波器块。 例如,以下内容: has_many :spam_comments, conditions: { spam: true }, class_name: ‘Comment’ 应该改写如下: has_many :spam_comments, -> { where spam: true }, class_name: ‘Comment’ 我已经尝试了许多不同的组合,并通读源,但无法弄清楚如何编写唯一约束来删除警告?

有人可以为pluginaweek – statemachine提供一个活跃的记录示例吗?

有人可以举例说明如何使用pluginaweek state_machine作为具有活动记录的票证模型吗? 我不明白文档中复杂的例子。 示例说明: 新的 – >接受,拒绝,反馈 接受 – >解决或反馈 反馈 – >接受或解决

validationhabtm关联的长度而不保存

我有一个与组有HABTM关系的用户模型。 我不希望用户能够在5个以上的组中,因此想要validationHABTM关系的长度。 在编辑用户页面上,我有一个复选框列表,用户可以在其中选择他们想要的组(我正在使用formtastic作为表单)。 在我的用户控制器中我打电话: @user.update_attributes(params[:user]) 这导致rails自动更新关联。 在我的用户模型中,我有以下内容: def validate if self.groups.length > 5 self.errors.add(:groups, “cannot have more than 5 groups”) end end 这导致表单validation失败,但update_attributes调用已更新数据库以反映对关联组的更改。 这样,每次用户单击“保存”按钮时,即使记录无效,也会保存其组关联。 解决这个问题的最佳方法是什么? 我想也许validation需要在组模型而不是用户模型上,这会起作用吗? 理想情况下,我想更新关联的组而不保存记录,进行validation,然后保存记录。

Rails .reject将类型ActiveRecord :: Relation转换为类型数组

我想在Rails中使用.reject方法从搜索中删除current_user 。 我这样做如下: @users = User.where{(firstname =~ my{“%#{params[:term]}%”}) | (lastname =~ my{“%#{params[:term]}%”}) | (email =~ my{“%#{params[:term]}%”})}.select(“id,firstname, lastname”) @users = @users.reject{|u| User.find(u.id) == current_user} 在第一行之后,如果我调用@users.class ,我得到ActiveRecord::Relation ,但是在使用.reject方法之后,如果我调用@users.class我会得到Array 。 使用.reject方法后如何维护ActiveRecord::Relation ? 我需要一个ActiveRecord::Relation才能在我的下一行中使用.paginate方法,即: @user = @users.paginate(:page => params[:page], :per_page => params[:page_limit])

如何连接两个活动记录结果以返回可以进一步过滤的新结果?

想象一下场景…… #models/user.rb class User { :active => 1 } end #models/account.rb class Account { public => true } end end 现在想象一下,我想将User(.id).accounts与Account.public_accounts连接起来,以显示用户可用的所有帐户的列表。 所以你认为我能够将User模型更新为这样。 #models/user.rb class User { :active => 1 } def all_accounts self.accounts + Account.public end end 但是,现在我将无法使用all()方法,因为它不再是那种类型的对象。 在控制器中我想这样做…… #controllers/accounts_controller.rb def search_all User.find(params[:user_id]).all_accounts.all( :offset => params[:offset], :limit => params[:limit] ) end 思考? 更新#1:范围不适用于我的方案。 我简化了我的方案,尝试着解决我的观点。 如上所述,我需要一种方法来组合两个活动记录结果,并保留在我的控制器中进一步过滤它们的能力。 […]

如何编写仅查看日期时间字段的时间组件的activerecord查询?

是否可以执行仅查看日期时间字段的时间组件的activerecord查询? 例如Battle.where(‘start_time ?’,’12:00′,’06:00′) 找到所有在早上6点到中午12点之间开始的战斗而不管它们发生的那一天? 在此示例中,start_time被定义为日期时间。

调用ActiveRecord的#relationship_ids = 会立即保存。 有任何变通方法吗?

我在ActiveRecord的#relationship_ids方法中遇到了一个奇怪的问题(当你声明’has_many’时会自动添加),这会立即为现有记录保存,这会引起一些问题,我想知道是否有人有任何有用的建议。 我正在运行Rails 2.3.5。 考虑这个简单的场景,其中有一篇文章has_many标签,比如说: a = Article.first a.name = “New Name” # No save yet a.author_id = 1 # No save yet a.tag_ids = [1,2,3] # These changes are saved to the database # immediately, even if I don’t subsequently # call ‘a.save’ 这对我来说似乎很令人惊讶。 它在尝试构建预览工具时特别引起问题 – 我想更新一堆属性然后预览文章而不保存它 – 但在这种情况下,标签更改会保存,即使没有其他字段也可以。 (可能相关的是,如果’a’是一篇新文章而不是现有文章,那么事情就像我期望的那样 – 在我称之为’a.save’之前,没有任何东西得到保存) 我有一个相当讨厌的解决方法 – 我可以覆盖模型中的tag_ids […]

ActiveRecord序列化与Hash列无法正常工作

我正在尝试使用ActiveRecord的序列化方法将Hash存储在表列中,但我无法使其工作。 我正在使用Rails 4.2.0和RailsApi 0.3.1 这是我的模特: class Agreement < ActiveRecord::Base serialize :phone_numbers, Hash end phone_numbers是一个类似于它的文本列。 然后在控制台中: a = Agreement.new(phone_numbers: {“dario” => “12345”}) a.phone_numbers => “{\”dario\”=>\”12345\”}” #(Note this is a string, not a Hash as I would expect) a.phone_numbers[“dario”] => “dario” #(Not “12345” as I would expect) 我错过了什么? 谢谢!

Rails 3和Rspec:计数器缓存列在预期1时更新为2

我正在用Rspec测试一个名为Solutions的模型,它有很多喜欢。 解决方案存储它有多少喜欢(counter_cache)。 它有一个“likes_count”属性(和相应的db字段)。 当我创建一个与解决方案关联的Like记录时,我希望解决方案属性“likes_count”应该从nil更新为1.当我在控制台中执行此操作时,它可以正常工作。 但是当我运行规范时,我在控制台中执行相同操作,它将TWICE更新为“likes_count”字段,将其设置为2。 看一下(在控制台中) 工作 : irb(main):001:0> solution = Factory(:solution) irb(main):004:0> solution.likes_count => nil irb(main):006:0> like = Factory(:like, :likeable => solution) => # irb(main):007:0> solution.reload.likes_count => 1 看看规格结果不工作 : 1) Solution counter cache should be increased when a like is created Failure/Error: subject.reload.likes_count.should be 1 expected # => 1 got # => 2 […]