在ShowNearby,我们一直在从PHP迁移到RoR 3.1,我们面临着一些问题,可能是你们之前已经解决过的问题.
我们有大量数据,我们决定将数据库分成几个可以单独处理的数据库.例如,我们的帐户,地点,日志和其他帐户被拆分为多个数据库
我们需要让迁移,固定装置,模型,以及良好的发挥,到目前为止它已经相当混乱.我们对解决方案的一些要求是可以接受的:
我们正在考虑为每个数据库设置单独的rails项目并将它们与ActiveResource连接,但我们认为这不是非常有效.你们之前有没有遇到过类似的问题?
非常感谢!!
ruby ruby-on-rails activeresource ruby-on-rails-3 rails-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?
我有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方式执行此查询?
任何输入都表示赞赏.
我知道有三个主要的符号为whereActiveRecord方法提供参数:
指定and的where方法是直截了当:
# 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
我需要在Ruby on Rails应用程序中实现细粒度的访问控制.单个用户的权限保存在数据库表中,我认为最好让相应的资源(即模型的实例)决定是否允许某个用户从中读取或写入.每次在控制器中做出这个决定肯定不会很干.
问题是,为了做到这一点,模型需要访问当前用户,调用类似的东西.但是,模型通常无法访问会话数据. may_read?(current_user, attribute_name)
有一些建议可以在当前线程中保存对当前用户的引用,例如在 此博客文章中.这肯定会解决问题.
相邻的Google搜索结果建议我在User类中保存对当前用户的引用,我想这应该是那些应用程序不必同时容纳很多用户的人.;)
长话短说,我觉得我希望从模型中访问当前用户(即会话数据)来自我做错了.
你能告诉我我错了吗?
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个模型连接起来,以便于访问.除了快捷方式之外,还有什么我想念的吗?
我有一个具有日期属性的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
我想要做
Model.where('id = ?', [array of values])
Run Code Online (Sandbox Code Playgroud)
如何在不将OR语句链接在一起的情况下完成此查找?
我创建了一个User模型,后来创建了一个Task模型.创作时我没有提到它们之间的任何关系.
我理解User has_many Tasks和a Task belongs_to User.我需要通过迁移在它们之间建立这种关系.
我的问题是,建立这种关系的迁移生成命令是什么?
任何帮助将受到高度赞赏.
ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord
说,我们有这样的事情:
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
ruby-on-rails ×10
activerecord ×3
ruby ×2
associations ×1
mysql2 ×1
rails-models ×1
session ×1
sql ×1