Tag: activerecord

Rails 3未定义方法`create’for nil:尝试创建相关对象时出现NilClass错误

我有两个模型,用户和配置文件,一对一的关系,我试图为用户创建一个新的配置文件,如果它还不存在: user = User.includes(:profile).find( params[:user_id] ) unless user.profile.present? user.profile.create end 但是我收到一个错误: nil的未定义方法`create’:NilClass

复杂Rails使用ActiveRecord查询多对多关系

我有以下型号 class Element has_many :tags, through: :tags_elements end class Tag has_many :elements, through: :tags_elements end 我需要:与变量上定义的所有标签相关的元素。 即所有带标签的元素:[“gt40”,“car”] 我尝试过以下方法: class Element scope :search_tags, lambda { |df| joins(tags_elements: :tag) .where(‘tags.name IN (?) ‘, df) .distinct(‘id’) } 所以我能做到 tag_list = [“gt40″,”car”] Element.search_tags(tag_list) 但它返回包含任何标记的外部元素。 但是我需要与ALL标签相关的元素。 有帮助吗?

newbie:将序列化整数附加到数据库列中并将其检索回来

我如何在数据库列中存储序列化的整数(用户ID范围从1到9999)并将其检索回来? 在我的用户模型中,我邀请了列, User model serialize: invites invites = text field 现在我想做两件事: 在“邀请”列中附加序列化的user_id整数(从1到9999) 从User.invited列中检索所有用户ID(反序列化它?)

Postgres的观点未被rspec认可

使用Rails 3.2.18和Postgres,我有一些表,我已经为其创建了一个视图,以最小化ActiveRecord加载的数据。 在应用程序中,一切似乎都正常运行,但当我尝试运行Rspec时,我得到: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation “properties_view” does not exist (’properties_view’是’properties’表中的视图) 我该怎么做才能确保Rspec从Postgres正确加载视图?

更新属性后ActiveRecord不保存

我想知道在这里是否有一些我不理解的东西,或者我是否遇到过ActiveRecord(4.1.1)中的错误。 我有一个数据库,里面只有一个属性,一个JSON字段。 我拿一个并尝试更新它。 test = Submission.find(1) test.update_attribute(‘json_data’,similar_but_different_json(test.json_data)) 我们假设方法similar_but_different_json对该JSON进行了一次小的更新。 在我的情况下,我正在修复由损坏的表单创建的一些数据错误。 执行此操作时,我没有收到任何错误,我在控制台中显示提交但未提交数据并返回true 。 为了实际更新记录,我必须这样做。 test = Submission.find(1) old_json_data = test.json_data test.json_data = “” test.json_data = similar_but_different_json(old_json_data) test.save 似乎正在发生的事情是ActiveRecord没有确定已经进行了必须保存的更改。 这可能是为什么将字段设置为空字符串然后返回JSON允许记录保存?

如何覆盖活动记录对象中的属性赋值?

我知道您可以使用虚拟属性执行此操作,但如果列实际存在会怎样? 例如,我的模型有一个raw_topic列。 设置raw_topic ,我希望基于raw_topic的内容设置artist和song_title 。 理想情况下,我想覆盖raw_topic=方法,但rails似乎不喜欢这样。 这样做的正确方法是什么? 回调是唯一的方法吗?

Rails:从另一个模型调用一个模型。 为什么这不可能?

我有以下型号…… class Room = ? and date <= ?', from_date, to_date).uniq end def self.vacant_rooms(from_date, to_date) self.where.not(id: Room.occupied_rooms(from_date, to_date)) end def self.blahblah(occupancy_count, smoking, from_date, to_date) layouts = Layout.layouts_with_occupancy_count_gt(occupancy_count) Room.rooms_with_smoking(smoking).vacant_rooms(from_date, to_date).joins(layouts) end end blahblah方法…… 当我试图从irb运行它时,我得到一个错误……“未知类:布局” 1)房间是否“不知道”布局。 我可以不使用这样的其他模型吗? 我该怎么做。 2)理论问题:有一个大的方法定义来获取某些信息更好吗?或者更好的是有很多小的分区方法,并且在一种方法中使用它们来获得更大的数据。 例如… 一个’大’方法: def self.find_rooms_with(occupancy_count, smoking, from_date, to_date) Room.vacant_rooms(from_date, to_date).joins(:layout).where(‘occupancy_count >= ?’, occupancy_count).where(‘smoking = ?’, smoking) end 绝不大,但一切都重新编码。 似乎它不会像DRY那么长时间。 […]

使用jsonb数组的Rails(postgres)查询

我的产品模型有一个jsonb字段specs (我们使用ActiveRecord的store_accessor管理)。 我的许多产品的规格都有一个名为spec_options散列规范。 在此之前,此spec_option字段只是文本。 现在它需要是一个数组。 之前用于查询此字段的产品的范围是: scope :with_spec_options, ->(spec_options) { where(“‘#{spec_options}’::jsonb \? (specs->>’spec_option’)”) } Ruby等价物(只是为了帮助理解这是做什么): select{ |product| spec_options.include?(product.specs[‘spec_option’]) } ActiveRecord等价物(如果spec_option是常规列): where(spec_option: spec_options) 但是,既然specs[‘spec_options’]是一个数组,我不能这样做。 我想我需要使用postgres’ ?| jsonb运算符,但我无法弄清楚如何将此操作的右侧转换为正确的格式。 Ruby等价物: def self.with_spec_options(spec_options) all.select{|product| if product.specs[‘spec_options’].present? product.specs[‘spec_options’].any?{|option| spec_options.include?(option) } else false end } end 有人有想法?

Active Record不存在连接表记录的情况

我试图获取连接表中不存在的所有记录的列表。 模型是User,Game和MarkedGame,用户可以将游戏标记为已播放。 这是一个多对多的关系: User > MarkedGame < Game 我想要的是所有未被用户标记的游戏列表。 我知道我可以做两个单独的查询并减去它们: Game.all – current_user.games 但我不喜欢这给我留下一个数组而不是一个Active Record关系对象。 此外,似乎应该有一种更高效的方式。 如果没有Active Record处理这个方法,是否有SQL方式? 我的原始SQL不是特别强大,所以任何帮助都会受到赞赏。 谢谢。

ROR中3路habtm的自定义数据库条目

我正在将现有的perl gtk应用程序转换为ROR应用程序 我有一个3路habtm关联模型。 class CustomerMaster “customer_phone_addres” has_and_belongs_to_many :phone_master, :join_table => “customer_phone_address” class AddressMaster “customer_phone_addres” has_and_belongs_to_many :phone_master, :join_table => “customer_phone_addres” class PhoneMaster “customer_phone_addres” has_and_belongs_to_many :address_master, :join_table => “customer_phone_addres” 连接表具有以下模式 CREATE TABLE customer_phone_address ( id bigserial NOT NULL, customer_master_id bigint, phone_master_id bigint, address_master_id bigint, CONSTRAINT customer_phone_address_pkey PRIMARY KEY (id), CONSTRAINT address FOREIGN KEY (address_master_id) REFERENCES address_master (id) […]