标签: rails-activerecord

连接Rails 3.1与多个数据库

在ShowNearby,我们一直在从PHP迁移到RoR 3.1,我们面临着一些问题,可能是你们之前已经解决过的问题.

我们有大量数据,我们决定将数据库分成几个可以单独处理的数据库.例如,我们的帐户,地点,日志和其他帐户被拆分为多个数据库

我们需要让迁移,固定装置,模型,以及良好的发挥,到目前为止它已经相当混乱.我们对解决方案的一些要求是可以接受的:

  • 一个模型应该与一个数据库中的一个表相关.
  • rake db:drop - 应该删除我们在database.yml中指定的所有数据库env
  • rake db:create - 应该创建我们在database.yml中指定的所有数据库环境
  • rake db:migrate - 应该运行迁移到各种数据库
  • rake db:test - 应该抓住fixture并将它们放入各种数据库和测试单元/功能/等

我们正在考虑为每个数据库设置单独的rails项目并将它们与ActiveResource连接,但我们认为这不是非常有效.你们之前有没有遇到过类似的问题?

非常感谢!!

ruby ruby-on-rails activeresource ruby-on-rails-3 rails-activerecord

77
推荐指数
4
解决办法
5万
查看次数

如何跳过ActiveRecord回调?

可能重复:
如何避免运行ActiveRecord回调?

我有这样的模特

class Vote < ActiveRecord::Base  
    after_save :add_points_to_user

    .....
end
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式迫使模型add_points_to_user在保存时跳过呼叫?可能像ActiveRecord#deletevs ActiveRecord#destroy

ruby-on-rails rails-activerecord

76
推荐指数
4
解决办法
8万
查看次数

Rails 4中的LEFT OUTER JOIN

我有3个型号:

class Student < ActiveRecord::Base
  has_many :student_enrollments, dependent: :destroy
  has_many :courses, through: :student_enrollments
end

class Course < ActiveRecord::Base   
    has_many :student_enrollments, dependent: :destroy
    has_many :students, through: :student_enrollments
end

class StudentEnrollment < ActiveRecord::Base
    belongs_to :student
    belongs_to :course
end
Run Code Online (Sandbox Code Playgroud)

我希望查询Courses表中的课程列表,这些课程在StudentEnrollments表中与特定学生相关联.

我发现也许Left Join是要走的路,但似乎rails中的join()只接受一个表作为参数.我认为可以做我想要的SQL查询是:

SELECT *
FROM Courses c LEFT JOIN StudentEnrollment se ON c.id = se.course_id
WHERE se.id IS NULL AND se.student_id = <SOME_STUDENT_ID_VALUE> and c.active = true
Run Code Online (Sandbox Code Playgroud)

如何以Rails 4方式执行此查询?

任何输入都表示赞赏.

sql ruby-on-rails mysql2 ruby-on-rails-4 rails-activerecord

76
推荐指数
10
解决办法
8万
查看次数

ActiveRecord OR查询哈希表示法

我知道有三个主要的符号为whereActiveRecord方法提供参数:

  1. 纯字符串
  2. 排列
  3. 哈希

指定andwhere方法是直截了当:

# Pure String notation
Person.where("name = 'Neil' AND age = 27")

# Array notation
Person.where(["name = ? AND age = ?", 'Neil', 27])

# Hash notation
Person.where({name: "Neil", age: 27})
Run Code Online (Sandbox Code Playgroud)

or为这个相同的where方法指定是为了哈希语法.可能吗?

# Pure String notation
Person.where("name = 'Neil' OR age = 27")

# Array notation
Person.where(["name = ? OR age = ?", 'Neil', 27])

# Hash notation DOESN'T WORK
Person.where({name: "Neil" OR age: 27})
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord ruby-on-rails-5

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

从Ruby on Rails中的模型中访问current_user

我需要在Ruby on Rails应用程序中实现细粒度的访问控制.单个用户的权限保存在数据库表中,我认为最好让相应的资源(即模型的实例)决定是否允许某个用户从中读取或写入.每次在控制器中做出这个决定肯定不会很干.
问题是,为了做到这一点,模型需要访问当前用户,调用类似的东西.但是,模型通常无法访问会话数据. may_read?(current_user, attribute_name)

有一些建议可以在当前线程中保存对当前用户的引用,例如在 此博客文章中.这肯定会解决问题.

相邻的Google搜索结果建议我在User类中保存对当前用户的引用,我想这应该是那些应用程序不必同时容纳很多用户的人.;)

长话短说,我觉得我希望从模型中访问当前用户(即会话数据)来自我做错了.

你能告诉我我错了吗?

ruby session ruby-on-rails rails-activerecord

69
推荐指数
10
解决办法
6万
查看次数

Rails has_one:通过关联

Rails有一个has_one :through关联,通过第二个模型帮助建立与第三个模型的一对一关联.除了建立一个快捷方式关联之外,它的实际用途是什么,否则这将是一个额外的步骤.

以Rails 指南为例:

class Supplier < ActiveRecord::Base
  has_one :account
  has_one :account_history, :through => :account
end

class Account < ActiveRecord::Base
  belongs_to :supplier
  has_one :account_history
end

class AccountHistory < ActiveRecord::Base
  belongs_to :account
end
Run Code Online (Sandbox Code Playgroud)

可能允许我们做类似的事情:

supplier.account_history
Run Code Online (Sandbox Code Playgroud)

否则将达到:

supplier.account.history
Run Code Online (Sandbox Code Playgroud)

如果它只是为了更简单的访问,那么从技术上讲,可能存在一对一的关联,它将模型与通过n-1模型的某个第n个模型连接起来,以便于访问.除了快捷方式之外,还有什么我想念的吗?

ruby-on-rails associations rails-models rails-activerecord

67
推荐指数
3
解决办法
5万
查看次数

ActiveRecord在日期字段上按年,日或月查找

我有一个具有日期属性的ActiveRecord模型.是否可以使用该日期属性按年,日和月查找:

Model.find_by_year(2012)
Model.find_by_month(12)
Model.find_by_day(1)
Run Code Online (Sandbox Code Playgroud)

或者只是可以find_by_date(2012-12-1).

我希望我可以避免创建年,月和日属性.

activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

66
推荐指数
7
解决办法
5万
查看次数

ActiveRecord where field =?可能值的数组

我想要做

Model.where('id = ?', [array of values])
Run Code Online (Sandbox Code Playgroud)

如何在不将OR语句链接在一起的情况下完成此查找?

ruby-on-rails rails-activerecord

64
推荐指数
3
解决办法
5万
查看次数

has_many,belongs_to关系在活动记录迁移rails 4中

我创建了一个User模型,后来创建了一个Task模型.创作时我没有提到它们之间的任何关系.

我理解User has_many Tasks和a Task belongs_to User.我需要通过迁移在它们之间建立这种关系.

我的问题是,建立这种关系的迁移生成命令是什么?

任何帮助将受到高度赞赏.

ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord

59
推荐指数
4
解决办法
6万
查看次数

rename_column会处理索引吗?

说,我们有这样的事情:

add_column :users, :single, :boolean
add_index :users, :single
Run Code Online (Sandbox Code Playgroud)

然后我们做

rename_column :users, :single, :married
Run Code Online (Sandbox Code Playgroud)

ActiveRecord和/或数据库是否也会处理索引的重命名,还是我必须手动删除索引并再次添加它?

activerecord ruby-on-rails database-indexes ruby-on-rails-3 rails-activerecord

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