Tag: activerecord

如何为has_one关联创建视图?

所以,想象一下我有这个模型: class Car has_one :engine end 和发动机型号: class Engine belongs_to :car end 当我为用户呈现表单时,他可以创建一辆新车,我只想让他从一个可用的引擎中选择(可用的引擎将在select ,由collection_select填充)。 问题是,如果我像这样构建字段: 当我尝试保存它时,我会得到一个AssociationTypeMismatch说它期望一个引擎,但它收到一个字符串。 这是这样做的吗? def create car = Car.new(params[:car]) engine = Engine.find(params[:engine]) car.engine = engine if car.save # redirect somewhere else # do something with the errors end end 我总觉得Rails会自动完成将引擎与汽车相关联的东西,但我不知道如何让他这样做。 切换has_one和belongs_to关联是实现这一目的的唯一方法吗? 我迷路了,我觉得我在这里缺少一些非常基本的东西。

Rails范围 – 完全匹配的位置

是否可以在Rails中使用where IN (?)查询来查看范围,这将检查完全匹配? 例如: Post.joins(:tags).where(‘tags.id IN (?)’, [1, 2, 3, 4]) 会找到标签为1,2,1,2,3和1, 2post。 但是应该只找到带有1, 2, 3, 4标签的post。

的ActiveRecord :: DangerousAttributeError

我必须连接到我们的freeradius服务器使用的现有数据库。 一个表有一个名为属性的列,我正在尝试访问该列。 访问时,我收到他的错误: ActiveRecord::DangerousAttributeError attribute? is defined by ActiveRecord 我试图在我的模型中选择并重命名此列: def self.default_scope Radcheck.select(“attribute as newattribute”) end 但那也没有用。 任何人都可以推荐一种方法吗? 我真的想在rails中重命名列!

限制has_many中返回的对象数

如何限制多个关系中返回的行数? 例如: class User < ActiveRecord::Base has_many :photos end 我希望能够做到: User.includes(:photos => {:limit => 8}).all 这显然不起作用,但具有此function的东西。 我是否需要自己编写SQL? 提前致谢! 编辑:我不想限制关联,只是查询结果。 所以一个用户可能有一千张照片,我只想要返回前三名。

多对多的自我加入铁轨?

Rails文档提供了一个很好的解释 , 说明如何处理只需要has_many-belongs_to关系的自连接。 在该示例中,员工(作为经理)可以拥有许多员工(每个员工,作为下属)。 但是,你如何处理has_many-has_many自连接(我听说过它被称为双向循环关联)? 例如,您如何处理员工以管理者身份拥有许多下属并且还有许多管理人员作为下属的情况? 或者,换句话说,用户可以关注许多用户并被许多用户跟踪?

Rails attr_readonly不起作用

根据这个问题和attr_readonly的文档 ,应该可以: class MyModel < ActiveRecord::Base attr_accessible :foo attr_readonly :bar end m = MyModel.create(foo: '123', bar: 'bar') # Should work m.update_attributes(bar: 'baz') # Should not work 然而,第一个失败,说我不能大规模分配bar 。 我在做什么?

如何避免多个查询:包含在Rails中?

如果我这样做 post = Post.find_by_id(post_id, :include => :comments) 执行两个查询(一个用于发布数据,另一个用于post的评论)。 然后,当我发布post.com时,不执行另一个查询,因为数据已经被缓存。 有没有办法只做一个查询,仍然通过post.comments访问评论?

我需要帮助正确形成这个ActiveRecord关联

基本上,用户可以作为(或可能是两者)供应商和作为活动教员的成员参与一个或多个事件。 默认情况下,用户既不是供应商也不是教师,而是在事件的上下文中获得(或两者)状态(例如,用户已作为其成员被接纳为事件)学院)。 看起来我想说的是用户通过供应商或教师链接表中的任何一个(或两个)都有很多事件,但我不确定我是否会在我的Rails模型中表示这一点。 这是我到目前为止所尝试的内容: class User vendors has_many :events through => faculty end 这是我认为我需要进行的查询示例: Select * from vendors where user_id = 1; Select * from faculty where user_id = 1; 有人可以提供一些指导如何正确形成这个ActiveRecord关联? 更新: 所以,我已经尝试使用单表inheritance来解决这个问题,而我最终得到的用户表记录只包含一个用户类型。 虽然仍然使用单表inheritance,但如何让我的用户拥有多种类型? (我知道这实际上是一个多对多的关系;我只是不确定如何使用STI实现这一点。) id | first_name | last_name | birth_date | city | zip_code | email | type | created_at | updated_at —-+————+———–+————+——+———-+——-+———+—————————-+—————————- […]

Rails / ActiveRecord中不区分大小写的唯一索引?

我需要在rails中的列上创建一个不区分大小写的索引。 我是通过SQL做到的: execute( “CREATE UNIQUE INDEX index_users_on_lower_email_index ON users (lower(email))” ) 这很好用,但在我的schema.rb文件中,我有: add_index “users”, [nil], :name => “index_users_on_lower_email_index”, :unique => true 注意“零”。 因此,当我尝试克隆数据库以运行测试时,我得到一个明显的错误。 我在这里做错了吗? 我应该在rails中使用其他一些约定吗? 谢谢您的帮助。

如何在ActiveRecord查询中使用OR条件

我想抓住所有提供电子邮件的用户或者名字和姓氏。 例如: users = User.where(:first_name => “James”, :last_name => “Scott”) 这将返回所有具有名字“James”和“Scott”的用户。 users = User.where(:email => “james@gmail.com”) 这将返回用户的电子邮件为“james@gmail.com”。 有没有办法做一个where子句来返回具有相同名字和姓氏的用户以及用户匹配的查询或者我需要在2个单独的where子句中进行合并的用户。