Tag: activerecord

将其他参数传递给Rails生成模型?

我是Ruby和Rails的新手,我在Ruby 1.9.2上运行Rails 3。 我想创建一个模型,所以我查看了文档以获取我想要的表定义,但我想知道如何将它传递给rails generate model? 基本上我想要这个: title :string, :null => false details :text, :limit => 30000, :null => false 但我只能指定列名和类型,而不是:null或:limit。 我试过rails model generate Article (title:string, :null => false) (details:text, :limit=>30000, :null => false)但这只是告诉我(是一个意外的标记。 如果我只是生成带有title:string details:text的模型,那么article.rb文件是空的,大概是因为它无论如何都是从DB中读取的。 由于Rails中的所有内容都应该是a)简单和b)魔术,我想知道我是否只是缺少某些内容并且必须传递类似哈希的内容来生成模型? 或者我是否真的必须手动编辑迁移.rb文件?

使用一个查询在Rails中同时使用ActiveRecord更新多个记录?

假设我的Rails应用程序中有一个名为“user_products”的表和一个名为UserProduct的对应模型。 我的表中还有一个名为’is_temporary’的字段。 现在假设我想运行这样的查询,但使用ActiveRecord抽象层: UPDATE user_products SET is_temporary = false WHERE user_id = 12345; 有没有办法使用ActiveRecord做到这一点? 也许有些事情 UserProduct.find_by_user_id(12345).update_attributes(:is_temporary => false) 我想只运行一个查询才能实现。

为什么这个rails关联在急切加载后单独加载?

我试图通过急切加载避免N + 1查询问题,但它无法正常工作。 相关模型仍在单独加载。 以下是相关的ActiveRecords及其关系: class Player < ActiveRecord::Base has_one :tableau end Class Tableau :tableau_cards end Class TableauCard :card end class DeckCard :tableau_cards end class Card < ActiveRecord::Base has_many :deck_cards end class Turn < ActiveRecord::Base belongs_to :game end 我正在使用的查询是在Player的这个方法中: def tableau_contains(card_id) self.tableau.tableau_cards = TableauCard.find :all, :include => [ {:deck_card => (:card)}], :conditions => [‘tableau_cards.tableau_id = […]

如何建立一对多的关系?

我有以下型号: User (id, name, network_id) Network(id, title) 我需要添加什么样的Rails模型关联才能执行以下操作: @user.network.title @network.users 谢谢

activerecord迁移中序列化列的默认值

所以我有一个序列化列:维度,在我的迁移中,我想将字段设置为默认哈希。 我试过了… create_table :shipping_profiles do |t| t.string :dimensions_in, :default => {:width => 0, :height => 0, :depth => 0} 只是 t.string :dimensions_in, :default => Hash.new() 但是这些字段最终为空。 如何在创建时为此字段设置默认的序列化对象,或者至少确保我的serialize属性始终是哈希?

在Rails中将记录转换为JSON时包含模型的虚拟属性

我正在尝试将ActiveRecord模型转换为Rails中的JSON,虽然to_json方法通常有效,但不包括模型的虚拟属性。 Rails中是否有一种方法不仅列出模型的属性,还列出了attr_accessor和attr_reader属性,以便在模型转换为JSON时所有可读属性都可用?

按Rails 3中的虚拟属性排序

背景:我有一组可以投票的post。 我想根据他们的“投票得分”对post进行排序,这可以通过以下公式确定: ((@ post.votes.count)/((Time.now – @ post.created_at)** 1)) 我目前正在定义投票得分: def vote_score(x) ( (x.votes.count) / ( (Time.now – x.created_at) ** 1 ) ) end 并将它们排序为: @posts = @posts.sort! { |a,b| vote_score((b) vote_score((a) } 目标:此方法对我的应用程序加载时间造成巨大损失。 有没有更好,更有效的方法来完成这种排序?

在Rails 2.x和3.x中使用ActiveRecord进行“喜欢”查询吗?

我在Rails 3.x中做这样的查询 Speaker.where(“name like ‘%yson%'”) 但是我想避免使用特定于DB的代码。 这样做的正确方法是什么? 如果在Rails 2.x中有一种方法可以做到这一点,那也会有所帮助。

Rails PG :: UndefinedTable:错误:缺少表的FROM子句条目

我有模特 class Offer < ActiveRecord::Base belongs_to :agency end class Agency < ActiveRecord::Base has_many :offers end 当我提出这样的要求时 – 一切都很好 @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). paginate(per_page: 10, page: params[:page]).decorate 但我想只选择属于active代理商的商品( agencies表中的列state ),所以我尝试这样做: @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). joins(:agency). where(agency: {state: ‘active’}). paginate(per_page: 10, page: params[:page]).decorate 完成此操作后,我收到错误PG::UndefinedTable: ERROR: missing FROM-clause entry for table “agency” 。 我的代码出了什么问题? […]

如何将CarrierWave文件迁移到新的存储机制?

我有一个Ruby on Rails站点,其中模型使用CarrierWave进行文件处理,目前使用的是本地存储。 我想开始使用云存储,我需要将现有的本地文件迁移到云端。 我想知道是否有人可以指出这样做的方法? 使用模型属性的加分点,允许我在后台逐行执行此操作,而不会中断我的站点以延长停机时间(换句话说,某些模型行仍然具有本地存储,而其他模型行则使用云存储)。 我的第一直觉是为每个使用云存储的模型创建一个新的上传器,所以我在每个模型上有两个上传器,然后将文件从一个传输到另一个,设置一个属性来指示应该使用哪个文件,直到它们全部转移,然后删除旧的上传者。 这似乎有点过分。