我试图解决以下问题。我有三个模型:用户has_many相机has_many录音。
class AddTables < ActiveRecord::Migration
def change
create_table :users
create_table :cameras do |t|
t.references :user, null: false, foreign_key: true
t.timestamp :archived_at, index: true
end
create_table :recordings do |t|
t.references :camera, null: false, foreign_key: true
t.timestamp :archived_at, index: true
end
end
end
相机和录制具有特殊字段“archived_at”,用于将记录标记为已删除(软删除)。我想让用户#记录查看所有摄像机(任何Camera.archived_at),但同时,我希望它只查看弧形记录(Recording.aarchived_at==nil)。我试过几次,但都没有成功。
===情况1 ===
class User < ActiveRecord::Base
has_many :cameras, -> { unscope where: :archived_at }
has_many :recordings, through: :cameras
end
class Camera < ActiveRecord::Base
default_scope { where(archived_at: nil) }
belongs_to :user
has_many :recordings
end
class Recording < ActiveRecord::Base
default_scope { where(archived_at: nil) }
belongs_to :camera
end
irb(主):013:0
===情况2===
class User < ActiveRecord::Base
has_many :cameras, -> { unscope where: :archived_at }
has_many :recordings, through: :cameras
end
class Camera < ActiveRecord::Base
default_scope { where(cameras: {archived_at: nil}) }
belongs_to :user
has_many :recordings
end
class Recording < ActiveRecord::Base
default_scope { where(recordings: {archived_at: nil}) }
belongs_to :camera
end
irb(主):013:0
===情况3 ===
class User < ActiveRecord::Base
has_many :cameras, -> { unscope where: {cameras: :archived_at} }
has_many :recordings, through: :cameras
end
class Camera < ActiveRecord::Base
default_scope { where(cameras: {archived_at: nil}) }
belongs_to :user
has_many :recordings
end
class Recording < ActiveRecord::Base
default_scope { where(recordings: {archived_at: nil}) }
belongs_to :camera
end
irb(主):016:0
试试这个:
< code>user.rb:
class User < ApplicationRecord
has_many :cameras
has_many :recordings, -> { unscope(where: :archived_at).where(recordings: {archived_at: nil}) }, through: :cameras
end
相机.rb
:
class Camera < ApplicationRecord
default_scope { where(archived_at: nil) }
belongs_to :user
has_many :recordings
end
录音.rb
:
class Recording < ApplicationRecord
belongs_to :camera
default_scope { where(archived_at: nil) }
end
以下是输出查询:
irb(main):088:0> User.first.recordings
User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
Recording Load (0.1ms) SELECT "recordings".* FROM "recordings" INNER JOIN "cameras" ON "recordings"."camera_id" = "cameras"."id" WHERE "cameras"."user_id" = ? AND "recordings"."archived_at" IS NULL [["user_id", 1]]
我已经两天没有解决AR协会的问题了。我知道有一个简单的解决办法,但我想不出来。 我有两个模型,产品和用户,应该联系在一起。一个产品应该属于一个用户,一个用户应该有很多产品。我没有在控制器中设置用户变量,所以我选择了habtm关联。以下是模型: User.rb Product.rb products\u控制器。rb型 _形式。html。erb公司 架构。rb型 所以,即使我知道,用户和产品之间应该有
问题内容: 说,我有一个整数,我想取消设置第三个位;如果有,我仍然会得到; 我该如何实现? 问题答案: 假设您正在从右边索引位,这应该可以取消设置以下位置中的特定位: 您可以使用类似的代码来设置该位: 哪里是像以前一样。(这假定位索引从0开始。)
问题内容: 有没有办法一次插入多个记录而不是一次插入? 我有一个非常丑陋的耙子任务,正在做以下事情… 这必须非常低效,并且必须有更好的方法… 问题答案: 该方法也将数组作为参数。 但是,它仍然对每个条目执行一个SQL查询,而不是单个SQL查询。它效率更高,因为它只需要在后台创建一个activerecord对象。 如果要同时从同一客户端插入许多行,请使用带有多个VALUES列表的INSERT语句一次
问题内容: 现在我有这行: 但是,由于程序属于公司,我想显示公司名称而不是公司ID。 渲染程序时如何包括公司名称? 问题答案: 这样的事情应该起作用:
问题内容: 我有这种关系:一个用户可以有零只或一只狗,但是一只狗必须属于某人。 我想定义以下范围: 我可以在第一种情况下执行此操作,因为默认情况下,在rails中,联接是INNER JOIN: 1 /这种针对第一个示波器的解决方案是否足够好? 2 /第二个课程你会做什么? 3 /(有一些关联)是否有更好的方法?: 谢谢你的帮助! 问题答案: 对于问题2,我认为以下方法应该有效: 其中include
我在这上面花了太多的时间,我自己也弄不明白。 我正在编写一些使用一些模块的代码,所以我想为我的消息创建一个特定的日志记录器,而不是其他模块的日志记录器(它们太多了,所以我不想为每个模块设置不同的级别)。 我将我的用例简化为: 当我执行前面的代码时,我希望记录我的信息消息。 结果我得到了: 与相同,它总是打印警告/错误/关键消息,而不是debug/info。 如果我提高了日志记录级别(假设),它会按