我正在构建一个使用ActiveRecord的非rails纯ruby应用程序。 我想写一个rake文件,为它创建一个数据库和表。 我尝试以下代码 namespace :db do task :create do conn = ActiveRecord::Base.connection create_db = “CREATE DATABASE foo_dev” conn.execute(create_db) end end 但这给了我 ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished 错误。 嗯,这很明显,因为我没有将ActiveRecord连接到任何数据库。 我该怎么办? 编辑:我想创建一个MySQL数据库。
我在Rails应用程序中使用ActiveRecord::ConnectionAdapters::PostgreSQLAdapter 。 假设我有一个架构: create_table “foo”, id: :bigserial, force: :cascade do |t| t.string “name” t.jsonb “data”, null: false end 现在假设我运行以下代码: class Foo ‘foobar’, :data => {:a => ‘hello’}) my_foo = Foo.where(:name => ‘foobar’).first! puts my_foo.data[:a] puts my_foo.data[‘a’] 输出将是: # nil # ‘hello’ 是否可以让ActiveRecord使用HashWithIndifferentAccess自动反序列化jsonb类型?
目前我正在研究一个gem,它会覆盖ActiveRecords。 通过努力,我偶然发现了两个不同的find_by实现。 一个是核心 ,它使用某种缓存,而FinderMethods模块中的一个直接调用。 这两个实现有什么区别? 什么时候使用?
我inheritance的代码有: class Graphic ‘asset_id’, :conditions => ‘asset_type_id = 5’, :order => ‘created_at’, :dependent => :destroy class Comment :asset_id 在我看来,像has_many不应该有foreign_key(它在belongs_to中被引用,我相信)但我不确定,你知道吗? 也就是说 class Graphic ‘asset_type_id = 5’, :order => ‘created_at’, :dependent => :destroy class Comment :asset_id
model Post # ActiveRecord associations have tons of options that let # you do just about anything like: has_many :comments has_many :spam_comments, :conditions => [‘spammy = ?’, true] # In Rails 3, named scopes are ultra-elegant, and let you do things like: scope :with_comments, joins(:comments) end 有没有办法使用AREL或其他更精简的语法来定义自定义关联,就像命名范围一样优雅? 更新 我认为将这种细节放入一个关联中并不是一个好主意,因为关联应该总是/大多数定义模型之间的基本关系。
在我的Ruby on Rails应用程序中,我有一个模型Instance属于另一个模型Zone 。 Zone模型本身属于Country模型。 我正在获取一组Instance对象,如下所示: scope :thisweek, -> { joins(:zone).where(zones: {created_at: …}).includes(:zone) 我想将Country加入Zone和Instance ,然后根据zone.country.name字段对结果Instance进行排序。 有人可以帮我吗?
我似乎无法在任何地方找到答案。 我知道我能做到: Item.where(:color => ‘red’) 获取所有红色物品,但我如何获得颜色不是红色的所有物品?
我正在使用ruby gem whois测试一个小的whois API,并且由于whois响应的格式非常有趣,有时我被要求不使用ActiveRecord来保存响应。 简单地说,这是它的工作原理: 用户从视图中输入表单中的域名(操作’lookup’=创建请求) 控制器捕获参数然后通过实例化请求对象[包含whois响应]发送到模型(非activerecord) Model使用whois gem并将回复发送回控制器 Controller以不同的格式(html / json / xml)发送响应,但只有html获取对象。 这是我的控制器“请求”的动作“查找”的代码: def lookup domain = params[:domain] @request = Request.new.search(domain) respond_to do |format| if @request != nil format.html format.json { render :json => @request} format.xml {render :xml => @request} else format.html { render :new } format.json { render json: @request.errors, status: :unprocessable_entity […]
我有一个带time属性的模型。 它是用户想要收到电子邮件的配置,即美国东部标准时间下午5点。 它以21:00:00存储在数据库中。 我想按范围查询。 例如,我希望每个用户的提醒时间在20:55:00到21:05:05之间。 Rails似乎奇怪地处理时间属性,因为它想要将它显示为完整的DateTime,因此数据库有21:00:00但是当加载到rails时,它显示为2000-01-01 17:00:00。 我的代码现在看起来像: scope :receives_report_reminder_at, -> (time) do start = (time – 5.minutes).strftime(‘%T’) ending = (time + 5.minutes).strftime(‘%T’) where(notification_report_reminder_time: start…ending) end 这适用于我的测试用例,但是当我在测试之外尝试时它不起作用。 思考? 有没有一种正确的方法来处理场景,或者我错了吗?
我在Trade和Execution之间有一个ActiveRecord关系。 我可以得到 Trade.executions #returns all exeuctions realated to the Trade 如果我做 Trade.executions.last 似乎似乎返回基于ID的最后一个执行记录。 这是根据ID检索与Trade相关的最后一条执行记录的正确方法吗?