Tag: activerecord

如何在Rails 3中总结记录?

我有一个ItemsSold模型,它有一天销售的杂志,书籍,video,greeting_cards,笔的总数。 如何优雅地返回一个数组,其中包含最后一个任意周数的每个项目的每周销售总数? 我有一个模型文件: #items_sold.rb class ItemsSold < ActiveRecord::Base attr_accessible :magazines, :books, :videos, :greeting_cards, :pens, :sold_date end 我的表定义如下: t.integer :magazines t.integer :books t.integer :videos t.integer :greeting_cards t.integer :pens t.datetime :sold_date 此外,是否有可能返回去年的月度总数?

Rails:将值序列化为逗号分隔而不是YAML

我正在寻找一种存储序列化值的方法,例如。 列中的ID。 在声称这不是最佳设计之前:该列用于关联记录的ID,但仅在显示记录时使用 – 因此不会对列上的选择进行查询,并且不会在此列上进行连接无论是。 在Rails中,我可以使用以下命令序列化列: class Activity serialize :data end 这将列编码为YAML。 由于传统的缘故,因为我只存储只包含整数的一维数组,所以我发现它更适合将它存储为逗号分隔值。 我已经成功实现了这样的基本访问器: def data=(ids) ids = ids.join(“,”) if ids.is_a?(Array) write_attribute(:data, ids) end def data (read_attribute(:data) || “”).split(“,”) end 这很好用。 但是我想在这个属性中添加类似数组的方法: activity = Activity.first activity.data << 42 … 我该怎么办?

Rails:has_many:through或has_many_and_belongs_to?

我有一个应用程序,我想通过另一个模型(即Task1> Relationship <Task2)将模型的实例链接到同一模型的另一个实例,我想知道我是否可以使用has_many:through。 基本上,关系模型将具有额外信息(type_of_relationship,lag),因此将其作为连接模型是理想的。 但是,没有两个模型可以加入,只有一个……自己。 has_many:还能继续吗? 如果是这样,联接表将如何显示? 使用Rails约定,您将有两个名为Activity_id的列,这显然不适用于数据库。 或者,我可以使用has_many_and_belongs_to在任务模型和关系模型之间设置多个但我不确定这是否准确地描述了一个只能在任何一个关系模型中链接两个任务模型的关系(当然,当然任务可能属于多个关系,因此可能属于多个关系。 我的直觉说与has_many_and_belongs_to一起使用并整理模型中的规则但是有更好的方法吗? 我正绕着这一圈转圈! 任何帮助赞赏。

按ActiveRecord中的特定ID排序

我inheritance了另一个程序员的Rails3项目,而且我对rails总体来说相当新。 他有一个看起来按特定id排序​​的查询。 有人可以解释这在实际的SQL中是如何解决的吗? 我认为这段代码正在杀死db并随后使用rails。 我试图在记录器中输出它,但是即使将config设置为:debug也似乎无法获得实际的SQL输出。 在这里大量搜索(在SO上)没有清楚地解释这个查询的外观。 代码如下: options = { select: “SUM(1) AS num_demos, product_id “, group: “product_id”, order: “num_demos ASC”, } product_ids = Demo.where(“state = ‘waitlisted'”).find(:all, options).collect{|d| d.product_id} sort_product_ids = product_ids.collect{|product_id| “id = #{product_id}”} Product.where(visible: true, id: product_ids).order(sort_product_ids.join(‘, ‘)) 据我所知,最后一行将使用ORDER BY“id = 1,id = 3,…”等对产品表创建一个查询,这对我来说没有多大意义。 所有线索都表示赞赏。

使用Active Record Reputation System gem,当我按投票排序时,不会发生排序

在信誉系统gem的RailsCast之后,我将以下代码添加到microposts_controller中 def index @microposts = Micropost.paginate(page: params[:page]).find_with_reputation(:votes, :all, order: “votes desc”) @micropost = current_user.microposts.build end 但除了我在模型中设置的默认范围外,我的索引操作中没有排序 在我的微博模型中,我有 class Micropost { order(‘created_at DESC’) } 如果我将默认范围更改为 default_scope -> { order(‘votes DESC’) } 它的工作方式只适用于索引页面,但会破坏我的所有其他页面。 我尝试删除默认范围并留在find_with_reputation方法中,但它仍然没有通过投票排序。 我也尝试在像这样的微博模型中的方法中定义范围 def self.popular find_with_reputation(:votes, :all, {:order => ‘votes desc’}) end 并像这样在microposts_controller中创建代码 def index @microposts = Micropost.paginate(page: params[:page]).popular @micropost = current_user.microposts.build end 它仍然没有按投票排序。 以下是访问微博索引页面的日志输出的副本https://gist.github.com/anonymous/9745552 […]

有没有办法重命名ActiveRecord模型列?

我正在考虑选择rails’ActiveRecord来访问旧数据库。 它的名称确实令人困惑,因此在模型中使用其列名不是一个好主意。 设置表名非常简单。 但是,我是否只能在模型中重命名列名? 约定优于配置很好,但在这种情况下我无法更改旧数据库名称。 使用ActiveSupport中的alias_attribute并不能解决我的问题,因为该对象在序列化或打印时仍会显示旧的列名。 例如,我需要以JSON格式返回这些模型,并且alias_attribute不适合这种情况。

MySQL / Rails查找方法中的歧义列

我收到了这个错误 Mysql :: Error:字段列表中的列’id’不明确 当使用像这样的find方法时: self.prompts.find(:all, :select => ‘id’) 使用has_many:through关联调用模型,因此MySQL抱怨有多个’id’列,因为所有使用的3个表都有’id’列。 我查了一下,了解SQL端出了什么问题,但不知道如何在ActiveRecord find方法中解决它,而且我对自己的SQL能力没有信心尝试滚动自己的SQL查询。 有没有办法将find方法按到能够发挥出色的效果? 编辑 这是相关的Actor模型代码: class Actor :destroy has_many :decisions, :through => :acts, :order => ‘created_at’ has_many :prompts, :through => :decisions, :order => ‘id’

将多个字段Rails转换为一个模型属性

我一直在寻找,但似乎无法找到一个很好的解决方案。 我的表单有一个日期(带有datepicker的文本字段)和一个时间(带有timepicker的文本字段),我想将其映射到名为due_at的模型字段。 到目前为止,我一直在我的控制器中处理它,使用单独的参数将其连接到日期时间,然后手动设置模型字段,但它很混乱,并且认为这个逻辑应该保存在模型/视图中。 我希望能够将两个表单字段处理为模型中的属性,然后将其拆分出来以获取错误,编辑操作等。基本上是一种自定义方式来执行标准datetime_select所做的事情,但我自己触摸它。 有什么东西可以放在我的模型中吗? def due_at=(date, time) … end 我一直在寻找一些地方,但无法知道你将如何做到这一点。 人们说使用javascript填充一个隐藏的字段,但对于一个非常简单的问题,似乎不是最干净的解决方案。 任何建议/帮助将不胜感激。 谢谢。

如何测试carrierwave文件是否已更改?

我正在尝试测试我的代码上是否使用载波更改了图像,但我找不到这样做的方法。 即使文件无效,似乎对象也被标记为已更改,因此它并未真正更改。 查看以下输出: (rdb:1) job.translated_xliff # (rdb:1) job.changed? false # As expected, didn’t changed yet (rdb:1) job.translated_xliff = “foo” “foo” (rdb:1) job.changed? true # Changed? “foo” is not a valid file. Lets see the file again… (rdb:1) job.translated_xliff # # same object ID! 如何检查我的代码上是否真的更改了此对象? 编辑:我在github上打开了一个问题 ,但问题仍未解决,但可以在那里找到更多信息

Rails activerecord:sum,max和join

我有两个模型users和posts 。 用户可以投票和查看post #users id name #posts id count_votes count_views users_id created_at updated_at 我希望过去24小时内收到最多票数和观点的用户。 最大的观点和投票总和获胜。 我做了什么我有这个SQL查询,它很好,但我想让用户获得最多的投票,这个给我所有用户,我不知道如何添加count_views select u.name as “Name”, sum(p.count_votes) from posts p inner join users u on p.user_id = u.id where p.created_at >= DATE_SUB(NOW(), INTERVAL 1 day) group by user_id; ActiveRecord版本 Post.select(“users.id, sum(posts.count_votes) as nb_votes”) .joins(:user).where(“posts.created_at >= ?”, 1.day.ago.beginning_of_day) .group(“posts.user_id”) # Results on […]