Tag: 渴望加载

如何在Rails中的“编辑”表单中映射关联数据?

这是如何从rails表单中的对象关联提供数据的后续行动? 我想知道,我想使用急切加载来为文章对象的编辑页面提供标签(以及通过关联表格保存的其他属性。在上一个问题中,我被告知我可以使用预先加载预加载该数据的关联。控制器中的IE我扩充.find调用include @article = Article.find(params[:id], :include => [:tags]) 这将是很好的,除了它有两个主要的警告。 首先是它为表格中的字段提供对象。 因此,在此示例中,编辑表单中的:tags字段将填充: [#] 而不是 Wondering 第二个警告是我无法将这些关联提供给自定义字段。 例如,我没有:tags字段,而是有一个:tag_list字段。 在创建文章时,用户在此输入多个标签。 在编辑时,:标签不会按名称映射并放入tag_list字段。 我总是可以将此行添加到控制器: @article.tag_list = @article.tags.map(&:name) 但我正在寻找一个更优雅的解决方案,因为我有很多字段,我必须写这个,这似乎浪费了代码行。 有人可以帮忙吗?

急切的装载没有装入铁轨

嗨,我在这里错过了什么? 我阅读了有关加载加入的文档,并尝试了以下内容。 您可以看到,当我使用“include”时,包含的连接不会输出所需的数据,但是当我在事后显式调用连接模型时,您可以看到有所需的数据。 以下是我在IRB中的模型和行为: class Appearance < ActiveRecord::Base belongs_to :photo belongs_to :person end class Photo :appearances end class PhotosController [:people, :appearances]) Photo Load (0.4ms) SELECT `photos`.* FROM `photos` WHERE `photos`.`id` = 51941 LIMIT 1 Appearance Load (0.3ms) SELECT `appearances`.* FROM `appearances` WHERE `appearances`.`photo_id` IN (51941) ORDER BY position Person Load (0.2ms) SELECT `people`.* FROM `people` […]

如何加载多态模型?

我正在尝试优化我们的一些查询。 一个特别的挑战是试图加载多态模型。 在这种情况下, UserView是多态的,并具有以下列: user_id, user_viewable_id, user_viewable_type 当我尝试运行此查询时。 @user_views = UserView.select(‘user_views.* AS user_views, songs.* AS songs, users.* AS users’) .joins(‘INNER JOIN users AS users ON user_views.user_id = users.id’) .joins(‘INNER JOIN songs AS songs ON user_views.user_viewable_id = songs.id’) .where(:user_viewable_type => ‘Song’).order(‘user_views.id DESC’).limit(5) 它似乎并不急于加载查询。 我正在使用名为MiniProfiler的gem,它表示它实际上运行的是n + 1个查询,而不是一个。 以下AR查询返回此SQL: SELECT user_views.* AS user_views, songs.* AS songs, users.* AS […]

渴望在子类上加载关联

我有以下(简化)类层次结构: def Parent < ActiveRecord::Base end def Child < Parent belongs_to :other end def Other < ActiveRecord::Base end 我想得到所有的父对象 – 如果它们是Child对象 – 让他们急切地加载:其他关联。 所以我希望我能做到: Parent.find(:all, :include => [:other]) 但是,正如我所担心的,我得到的信息是:“没有找到名为’其他’的协会;也许你拼错了它?” 在这种情况下建立预先加载的最佳方法是什么? [编辑]根据要求,这是更具体的例子: 父=事件 Child = PostEvent 其他=发布 我想记录不同类型的事件,所有事件都有自己的属性(其中一些是对其他对象的引用),如上例所示。 同时我希望能够列出发生的所有事件,从而列出父类。

Rails Eager Loading和where子句

我渴望用它的关联加载一个模型对象: user= User.includes(:posts).find(1) 但是在代码中的某些点我想做这样的事情: user.posts.where(:topic => “x”) 但这只是重新运行查询。 所以我想我会这样做: user.posts.select{|post| post.topic == “x” } 这不会重新运行查询。 但我有几个问题。 首先,这是正确的方法吗? 其次,我对这种情况下的选择有点困惑。 因为当我运行最后一行时,即使我没有使用包含函数,第一次运行查询,然后再运行它,如果我再次运行它,它不会…那么是否涉及某种缓存? 因为当我使用where子句时,它每次都会运行查询。 谢谢。

渴望与Active Model Serializers加载关联

背景 我有一个带有深层嵌套关联的rails应用程序。 .-< WorkPeriod Timecard -< Week -< Day -<–< Subtotal `-< Adjustment -< (has many) 我正在使用Active Model Serializer来构建API。 在客户端,我想一次性加载时间卡及其所有关联。 目前我的序列化器看起来像这样, class TimecardSerializer < ActiveModel::Serializer embed :ids, include: true has_many :weeks end class WeekSerializer < ActiveModel::Serializer embed :ids, include: true has_many :days end # … etc … 问题 这一切都找到了,除了没有任何东西急切加载。 因此,它最终会针对每个请求对数据库进行大量调用。 对于每周,它会单独请求该周的日期。 并且对于每一天,它单独请求它的work_periods,小计和调整。

Rails渴望加载所有查找

好吧,我一直在玩一些急切的装载东西,并有两个模型类似于: Class Recipe < ActiveRecord::Base belongs_to :cookbook has_many :recipetags end 和 Class Cookbook [:recipetags] end 哪个好,当我找到一本食谱时,我急切地加载食谱,然后食谱急切加载:recipetags: cb = Cookbook.find(10590, :include => [:recipes]) 但我想要做的就是每当我打开一个食谱时,让它自动引入所有热切的关联 – 基本上我想这样做: rec = Recipe.find(123) 并且在这种情况下急于加载:recipetags。 我意识到这似乎微不足道,但实际上我在Recipe上有大约4-5个关联,我只是没有在这里显示它们,而不是必须明确地执行:包含在每个查找调用我想它只是发生。 我假设我可以覆盖Recipe.find在Recipe模型中执行它,但是想知道是否有更清洁的方式….

在MongoMapper中是否有一种方法可以实现与AR包含方法类似的行为?

MongoMapper中是否有与此类似的function: class Model < ActiveRecord::Base belongs_to 😡 scope :with_x, includes(:x) end 运行Model.with_x时,这可以避免对X进行N次查询.MongoMapper中是否有类似的function?