Tag: activerecord

rails scope和join

我已经尝试了一切我认为可以为此工作的东西,而且我什么都没有。 在rails 3中,我需要在他们的汽车中找到所有有cd播放器的用户。 汽车有一个用户和一个收音机,用户属于汽车,收音机有很多汽车。 我对如何通过用户模型中的作用域执行此搜索感到磕磕绊绊。 class User belongs_to :car class Car belongs_to radio has_one :user, :dependent => destroy class Radio has_many :cars

何时保存has_many关系中的Active Record对象?

我正在使用Rails 1.2.3(是的,我知道)并且对于has_many如何在对象持久性方面起作用感到困惑。 为了举例,我将使用它作为我的声明: class User < ActiveRecord::Base has_many :assignments end class Assignment < ActiveRecord::Base belongs_to :user end 根据我的理解,这会生成一个方法User#assignments.build ,它创建一个Assignment对象,其user_id是接收实例的id (并且其他字段在参数中指定),但不保存此对象在数据库中。 稍后可以通过调用Assignment#save!保存该对象Assignment#save! 。 然而,我一直在使用作为教程和参考的实用程序员使用Rails的敏捷Web开发,第二版 ,说: 如果父对象存在于数据库中,则将子对象添加到集合会自动保存该子对象。 这里似乎有矛盾。 我想知道的是: 如果我执行some_user.assignments.build ,是否保存了Assignment对象? 如果我执行some_user.assignments << Assignment.new ,是否保存了Assignment对象? 如果我做some_user.assignments << Assignment.create ,是两个数据库调用,还是只有一个? 如果我在创建它之间修改Assignment对象并将其添加到some_user.assignments呢? 如果我save!会怎么样save! 一个Assignment对象,其对应的User尚未保存在数据库中? PS我之所以不仅仅使用User#assignments.create的原因是因为它不允许我将初始化扩展到外部方法,我希望能够做到这一点。 我也不想多次去数据库。

如何将此原始查询转换为Active记录查询接口或arel?

我想找到至少有一个variant_type = 1的variant并且没有variant_type = 2的任何variant的variant_type 。 所以我的查询如下: Course.where(“id IN ( SELECT course_id FROM course_variants WHERE variant_type = 1 ) AND id NOT IN ( SELECT course_id FROM course_variants WHERE variant_type = 2 )”) 此外, course有很多course_variants 。 我在where子句中使用原始查询,我想使用Active记录接口或Arel来改进它,任何解决方案都适用于此? 谢谢! 使用输入更新预期输出 输入 course: {id=1, course_variants: [{variant_type: 1}, {variant_type: 2}]} course: {id=2, course_variants: [{variant_type: 1}, {variant_type: 3}]} course: […]

如何查找记录,其has_many通过对象包括某些列表的所有对象?

我有一个典型的标签和任何对象关系:说 class Tag :tagazations end class Tagazation { :scope => :project_id } end class Project :tagazations end 这里没什么特别的:每个项目都有一个或多个标签。 该应用程序具有搜索function:您可以选择某些标签,我的应用程序应该显示所有标记有所有提及标签的项目。 所以我得到了一个必要的tag_ids数组,然后遇到了这么简单的问题

为什么我的范围被缓存?

我有一个范围如下: scope :top, order(‘score DESC’) 它在我的控制器中使用如下: def top @users = User.top render “list” end 现在,似乎这个范围正在被无条件缓存。 如果我加载首页,添加用户并重新加载,则用户不会出现在列表中。 如果我这样做: def top @users = User.order(‘score DESC’) render “list” end 结果不会被缓存。 这里发生了什么? 我正在使用Ruby 2.0.0和Rails 4.0.0

ActiveRecord查询:按所包含模型的总和排序

项目has_many:项目 项目belongs_to:项目 我正在尝试按各自项目的总价格对项目进行排序。 就像是: Project.includes(:items).order(‘SUM(items.price)’) 使用此代码,ActiveRecord仅返回第一个项目。 我错过了什么?

将ActiveRecordvalidation错误转换为API耗材错误

我正在Rails 4中编写一个非常标准的CRUD RESTful API。虽然我在error handling方面做得不够。 想象一下,我有以下型号: class Book < ActiveRecord::Base validates :title, presence: true end 如果我尝试创建没有标题的图书对象,我将收到以下错误: { “title”: [ “can’t be blank” ] } ActiveRecordvalidation旨在与Forms一起使用。 理想情况下,我希望将每个人类可读validation错误与API使用者可以使用的常量相匹配。 所以类似于: { “title”: [ “can’t be blank” ], “error_code”: “TITLE_ERROR” } 这可以用于显示面向用户的错误( “标题不能为空” ),也可以在其他代码中使用( if response.error_code === TITLE_ERROR …)。 在Rails中是否有任何工具? 编辑:这是Rails 2天非常相似的问题 。

使用活动记录按月和日查找记录,忽略年份和时间

我有一个模型(参赛作品),有五年的记录(每天一个记录)。 我需要一个方法,当传递一个日期对象,如2011-12-25 00:00:00 ,将显示所有在12月25日发生的记录(查询:created_at列),无论年份如何或时间过去了。 RoR 3.0.9 / Ruby 1.9.2p290

rails paperclip没有通过sql查询从另一个模型直接访问

如果尝试从另一个模型访问回形针图像以通过SQL查询在其视图中显示,它将不会显示图像。 我从类别控制器尝试了类似这样的事情,从索引页面,通过选择框获取表格中的参数。 category controller def show @category = Category.find_by_sql [“select distinct l.* from listings l , categories c, categories_listings cl where c.id = cl.category_id and l.id = cl.listing_id and c.id in (?,?)” , params[:c][:id1] , params[:c][:id2]] end 在显示页面中,我无法从类别控制器访问列表模型中的回形针属性。 category show page 列表和类别具有habtm关系

Rails AR记录包括“新的”未保存记录

我有一个’文章’节目动作的观点。 文章有评论。 视图显示:a)文章b)评论c)新评论表 我的控制器的动作是: def show @article = Article.find(params[:id]) @comments = @article.comments @comment = @comments.new end 视图使用partial显示注释。 循环通过@comments时,我发现列表中还包含来自控制器操作的新记录。 我可以避免使用以下方法显示此行: … 我这样做错了还是预期的行为?