Tag: activerecord

特别是一对多的关系

我有一个带有User模型和House模型的Rails 3.1应用程序(这就像一个组)。 我已经在这两者之间建立了多对多关联模型Membership关系,并且有一些方法可以管理连接模型中某个房屋中用户的角色。 但我的问题是用户只有一个房子而不是很多。 所以我总是要做user.houses.first来得到他的房子(我已经设置了一个帮助房子,但是设计不好所以我试图把has_one :membership和has_one :house, :through => :membership而不是has_many :memberships和has_many :houses, :through => :memberships 。 但是每次我尝试从User访问house时我都会收到错误。 怎么可能像我试图做的那样用连接表设置这种一对多的关系? 先感谢您。

具有不同日期/时间格式的ActiveRecord

我们有一个应用程序,用户可以设置他/她的首选日期/时间格式。 用户应在整个应用程序中以配置的格式输入datetime时间。 现在的问题是,在create/update ActiveRecord时,几种格式的datetime被错误地解析。 例如,用户已将日期/时间格式设置为hh:mm dd/MM/yyyy 。 现在,如果用户输入17:00 04/05/2012则将其解析为5 PM 5 Apr, 2012 5 PM 4 May, 2012 ,应该是5 PM 5 Apr, 2012 5 PM 4 May, 2012 1.8.7 :004 > a = Article.create!(:name => ‘a1′, :published_at => ’17:00 04/05/2012’) => # 我知道ruby / rails具有预定义的格式集,日期/时间字符串将根据这些格式进行评估,如果按顺序匹配任何格式,它将使用该格式解析给定的字符串。 另一个例子 1.8.7 :006 > a = Article.create!(:name => ‘a1’, :published_at […]

Rails 5:嵌套表单和现有关联对象

我对Rails比较陌生,所以请原谅我,如果这是一个非常天真的问题。 :] 我有两个可以标记的模型: Collection和Video 。 我通过具有多态关联的Tag模型和has_many :through与Tagging关联来支持这一点。 这一切都很完美。 我正在弄清楚的是如何设置视图以适应这种情况。 我知道如果我只是创建或更新与单个模型唯一关联的标签,那么我可以使用一个简单的表单并将accepts_nested_attributes_for添加到我的模型中,但我遇到的问题是我想首先检查是否存在标记,只有在它不存在时才创建它,否则只需将现有标记与新video或集合相关联。 显然我可以在控制器中手动执行此操作,但由于Rails提供了一种自动创建和更新关联对象的机制,我想知道它是否提供了与关联现有对象类似的东西? 另外,我不确定是否应该嵌套tags资源并在TagsController集中处理它,或者我是否应该从拥有对象的控制器管理标签,例如VideosController 。 任何帮助或建议将不胜感激。

Rails计数记录而不再查询

说我查询表 rawStats = Stats::TrackProcessed.select(“token”) 并收到表中所有令牌的数量。 看起来像这样: 3e79a387c29bda1069271e06ad03d82b8296242e 059681f46ab1c1fa8cf8443a82f0898172e0b646 eacd846ea4e91b49f92f416f61e0f2d075b9dae7 eacd846ea4e91b49f92f416f61e0f2d075b9dae7 811705019a970929801adbf3db0ede31ed01816c 我需要返回一个看起来像这样的哈希列表 { ‘3e79a387c29bda1069271e06ad03d82b8296242e’ => 1, ‘059681f46ab1c1fa8cf8443a82f0898172e0b646’ => 1 ‘eacd846ea4e91b49f92f416f61e0f2d075b9dae7’ => 2 ‘811705019a970929801adbf3db0ede31ed01816c’ => 1 } 第一个值是标记,第二个值是表中该标记的出现次数。 然后我需要从所有记录中获得平均值。 到目前为止,我已经查询了表 rawStats = Stats::TrackProcessed.select(“distinct token”) 通过检索唯一的令牌 然后,每个循环计算每个令牌的出现次数 rawArr = [] rawStats.each do |r| token = { :token => r.token, :count => rawStats.where(“token = ?”,r.token).count(‘token’) } rawArr << […]

加载Ruby on Rails模型而不加载整个框架

我正在寻找创建一个自定义守护程序,它将运行各种数据库任务,如延迟邮件和用户通知(每个通知是通知表中的一个单独的行)。 我不想使用script/runner或rake来执行这些任务,因为某些任务可能只需要根据任务创建一个或两个数据库行或数千行。 我不希望启动ruby进程或为每个操作加载整个rails框架的开销。 我计划将这个守护进程保留在内存中。 要创建这个守护进程,我想在我的ruby on rails应用程序中使用我的模型。 我有一些rails插件,例如acts_as_tree和AASM ,如果我在哪里使用模型,我将需要加载。 我需要加载的一些插件是我创建的ActiveRecord :: Base上的自定义hacks。 (如果他们需要从导轨的其他部分使用组件,我愿意接受删除或重新编码某些插件。) 我的问题是 这是一个好主意吗? 并且 – 这是否可以通过手动包含我的模型和插件中的每个文件来实现? 如果不是一个好主意 什么是好的选择? (我不习惯编写自己的SQL查询,但我必须为守护程序添加数据库约束和单独的用户以防止任何愚蠢的事故。鉴于我对配置数据库不熟悉,我想使用活动记录作为拐杖。)

如何使用:inverse_of与多个关联?

有谁知道我应该在下面的空白区域放置什么来使这种关系开箱即用? 我非常接近于完成这项工作,因为所有协会都能完美地工作。 唯一的问题是我无法保存附加水果的用户,因为目前没有:inverse_of。 我需要:inverse_of指向正确的方向,以便我可以用水果保存用户,而不必先保存用户,然后再将水果附加到它。 谢谢! 评论后更新: 用户模型: class User { bought }, class_name: ‘FruitsUser’, inverse_of: :buyer has_many :bought_fruits, through: :bought_fruits_users, class_name: ‘Fruit’, source: :bought_fruit has_many :sold_fruits_users, -> { sold }, class_name: ‘FruitsUser’, inverse_of: :seller has_many :sold_fruits, through: :sold_fruits_users, class_name: ‘Fruit’, source: :sold_fruit end 中台模型: class FruitsUser { where(type_of: ‘bought’) } scope :sold, -> { where(type_of: […]

Rails嵌套委托属性未更新

楷模 class User < ActiveRecord::Base has_one :meta, class_name: SeoMetum, as: :metumable, dependent: :destroy delegate :browser_title, :browser_title=, :meta_description, :meta_description=, to: :meta has_one :collection accepts_nested_attributes_for :collection after_save :save_meta_tags! def save_meta_tags! meta.save end end class Collection < ActiveRecord::Base has_one :meta, class_name: SeoMetum, as: :metumable, dependent: :destroy delegate :browser_title, :browser_title=, :meta_description, :meta_description=, to: :meta belongs_to :user after_save :save_meta_tags! def […]

使用Closure_tree gem而不是Awesome嵌套集

嗨,我按照链接设置了closure_tag gem。 当我尝试以下列方式使用closure_tree语法时(newStructure.find_or_create_by_path(parent)而不是newStructure.move_to_child_of(parent))…得到以下错误: “不能大规模分配受保护的属性:祖先,后代,世代” 这是使用newStructure.find_or_create_by_path(parent)的正确方法吗? def self.import(path) newStructure = FileOrFolder.find(:first, :conditions=>[“fullpath = ?”, path]) if newStructure return newStructure end newStructure = FileOrFolder.new newStructure.fullpath = path pathbits = path.split(‘/’) newStructure.name = pathbits.last newStructure.save parentpath = path.sub(/#{Regexp.escape(pathbits.last)}$/, ”) if parentpath.length > 1 parentpath.sub!(/\/$/,”) parent = FileOrFolder.find(:first, :conditions=>[“fullpath = ?”, parentpath]) unless parent parent = FileOrFolder.import(parentpath) end #newStructure.move_to_child_of(parent); […]

NoMethodError:在Rails中未定义的方法`created_at’

所以这是我从ActiveRecord中检索到的other = [#]对象other = [#]为什么我不能做other.created_at而我可以做other.name ? 这是模型: class Referrer < ActiveRecord::Base end 我得到的错误: NoMethodError: undefined method `created_at’ for # 我错过了什么?

Rails模型中的class_name foreign_key

我最近遇到过这段代码。 用户有很多答案。 :class_name和:foreign_key的目的是什么? class Answer ‘Question”, :foreign_key => ‘question_id’ end