标签: sinatra-activerecord

Ruby Gem ActiveRecord查找具有多个条件的方法

我建设使用三个数据库的表一西纳特拉的应用程序:user,postlike.

我想运行一个查询,在like表中找到一个条目,如下所示:

FIND in like WHERE user_id == params[:user_id] AND post_id == params[:post_id]
Run Code Online (Sandbox Code Playgroud)

(对于一个条件,我会用:Like.find_by_user_id(params[:user_id]))

我的问题是:

如何使用ActiveRecordGem 运行具有多个条件的查找查询?

ruby gem activerecord ruby-on-rails sinatra-activerecord

12
推荐指数
2
解决办法
8860
查看次数

在ActiveRecord 5中替换ActiveRecord :: ConnectionAdapters :: ConnectionManagement

我们正在将一个Sinatra应用程序从ActiveRecord 4升级到ActiveRecord 5.之前我们有这一行:

use ActiveRecord::ConnectionAdapters::ConnectionManagement

这是因为在请求完成后没有清理连接.以下是关于此主题的SO讨论:

从ActiveRecord 5开始,此行不再有效.rails项目中的这个对话说明:

删除它有利于Executor和Reloader API.被删除的中间件不是公共API的一部分.如果你想在Rails之外使用它,你需要制作一个.

这是否意味着,如果有人要将ActiveRecord 5与Sinatra一起使用,除非开发人员重新创建现已删除的中间件,否则连接将在请求后再次"泄露"或未返回到池中?

在Sinatra示例中,现在是否需要在ActiveRecord 5中包含此行?

after do
  ActiveRecord::Base.clear_active_connections!
end
Run Code Online (Sandbox Code Playgroud)

这就是链接线程的含义,但我希望得到一个明确的答案,我可以回到我的开发团队.

ruby activerecord ruby-on-rails sinatra sinatra-activerecord

12
推荐指数
1
解决办法
1196
查看次数

Rails 4:ActiveRecord“all”的替代方案,因为它现已弃用

ActiveRecord 4.0.0 版本中的ActiveRecord 功能是否find_each可以接受替代?all

例如,之前我有:

all_users = User.all
Run Code Online (Sandbox Code Playgroud)

它会产生一条警告,指出类似于 ActiveRelation:all 的内容已被弃用。

作为替代,我想出了:

User.find_each do |user|
  all_users += user
end
Run Code Online (Sandbox Code Playgroud)

这是可以接受的,还是我应该以另一种方式做?

我理解使用背后的原因find_each是因为“批处理”,如果存在非常大的数据集,它将允许查询停止运行。我们假设这种情况下数据集很小。

编辑

似乎只有当您使用条件时才会出现弃用错误,例如:

User.all(:conditions => ["name like ?", "%bob%"]) 
Run Code Online (Sandbox Code Playgroud)

产生:

弃用警告:Relation#all 已弃用。如果你想立即加载一个关系,你可以调用#load(例如 Post.where(published: true).load)。如果你想从关系中获取记录数组,你可以调用#to_a(例如Post.wher e(published: true).to_a)。(从 (irb):8 处的 irb_binding 调用)

上述内容的正确替换似乎是:

User.where("name like ?", "%bob%")
Run Code Online (Sandbox Code Playgroud)

ruby activerecord sinatra ruby-on-rails-4 sinatra-activerecord

4
推荐指数
1
解决办法
4984
查看次数

Sinatra和ActiveRecord(无Rails) - 创建测试数据库

我正在尝试使用带有ActiveRecord的Sinatra的更简单的设置,我遇到了一些令人费解的问题,并且会喜欢另一组眼睛.我将提供所有相关文件:

database.yml的:

development:
  adapter: sqlite3
  database: db/development.sqlite3

test:
  adapter: sqlite3
  database: db/test.sqlite3

production:
  url: <%= ENV['DATABASE_URL'] %>
Run Code Online (Sandbox Code Playgroud)

Rake文件:

require_relative "demo_app"
require 'sinatra/activerecord/rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = "test/*_test.rb"
end
Run Code Online (Sandbox Code Playgroud)

test_helper.rb中:

ENV['RACK_ENV'] = 'test'
ENV["SINATRA_ENV"] = "test"

require_relative '../demo_app'
require 'minitest/autorun'
require 'rack/test'

ActiveRecord::Migration.maintain_test_schema!
Run Code Online (Sandbox Code Playgroud)

迁移文件:

class CreatePeople < ActiveRecord::Migration
  def change
    create_table :people do |t|
      t.string :name
      t.date :dob
      t.string :gender
      t.string :gender
      t.integer :zipcode
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,我想对测试数据库运行测试.当我尝试做的时候

rake db:create RAILS_ENV=test - 它创建了一个development.sqlite3

rake db:migrate RAILS_ENV=test - 相同+运行迁移 …

ruby-on-rails sinatra sinatra-activerecord

2
推荐指数
1
解决办法
1333
查看次数

如何使用活动记录计算 has_many 关系?

我有一个连接表,其中列出了一个user_id和一个item_id(多对多关系)。

我试图在 erb 页面上显示用户拥有的项目数量。

我该怎么做?

我的连接表/模型 UserItem 现在有 11 条记录,所以很明显,如果我这样做了UserItem.count,它会给我 11 条记录。

但是我怎么能告诉它对于每个 user_id,计算那个特定用户有多少个 item_id?然后显然我会迭代这个。

编辑:

好的,我发现这UserItem.group(:user_id).distinct.count给了我 {user_id => # of items per user} 的哈希值。

我如何不仅迭代散列,而且使它与每个当前的 user_id 相关联?

<% @users.each do |user| %>
          <li><%= user.username %>
          has been to <%= UserItem.group(:user_id).distinct.count %>!</li>
        <% end %>
Run Code Online (Sandbox Code Playgroud)

到目前为止,这只是插入散列,我如何对应每个 user_id 以便它与它显示的 user.username 对齐?

ruby sql activerecord sinatra-activerecord

1
推荐指数
1
解决办法
2088
查看次数