Tag: sti

ElasticSearch with Tire不包括带STI模型的自定义分析器

我有一个STI模型,我希望可以使用ElasticSearch和Tire进行搜索。 我遇到的问题是当Tire创建映射时,似乎忽略了我的第二个模型的自定义分析器。 以下是我的模型示例。 class Account { :analyzer => { “custom_search_analyzer” => { “tokenizer” => “keyword”, “filter” => “lowercase” }, “custom_index_analyzer” => { “tokenizer” => “keyword”, “filter” => [“lowercase”,”substring”] } }, :filter => { :substring => { “type” => “nGram”, “min_gram” => 1, “max_gram” => 20 } } } do mapping do indexes :id, :type => […]

声明Rails模型子类的静态属性

我是Ruby和Rails(以及编程!)的新手,并且试图找出将属性从模型传递给其STI子元素的惯用方法。 我有一个通用模型’Document’,以及一些inheritance它的模型 – 让我们以’Tutorial’为例。 我有一个’icon’的字符串字段,我想在其中存储图标的文件名但不是完整路径(我认为路径应该取决于每个模型,因为它是检索记录数据的细节?): class Document < ActiveRecord::Base attr_accessible :title, :body, :icon @@asset_domain = "http://assets.example.com/" @@asset_path = "documents/" def icon @@asset_domain.to_s + @@asset_path.to_s + read_attribute(:icon).to_s end end 这是我想对子类做的事情,所以他们在适当的地方寻找他们的’图标’(或任何其他资产)。 class Tutorial < Document attr_accessible :title, :body, :icon @@asset_path = "tutorials/" # Other tutorial-only stuff end 我已经阅读过关于类变量的内容,并理解为什么我上面写的内容并没有像我预期的那样工作,但是在Tutorial类中覆盖’asset_path’的最佳方法是什么? 我不认为我应该使用实例变量,因为值不需要更改每个模型实例。 任何想法都非常赞赏(即使这意味着重新考虑它!)

Rails单表inheritance(STI)的替代方案?

我有一个模型和桌子,我相信它非常适合STI。 我的表叫做Finances ,有两种类型:收入和支出。 除了type还有其他三列: description , amount和date 。 我在Rails中使用STI时非常紧张,因为它需要一些黑客攻击。 我太新了Rails来破解代码。 即使它有效,我也不明白。 这似乎很危险。 我的问题是,如果我不使用STI,如何设置我的模型,控制器和视图? 在模型中对项目进行分组的最佳做法是什么? 或者我在设置视图之前只做Finances.where(“type = ‘Income'”) ? 编辑:我做了一个要点,以显示我正在使用的代码。 当我运行它时,我收到错误: undefined method `incomes_path’ for #<#:0x007fbc93883220>

ActiveRecord通过针对STI类的作用域构建错误类的实例

我希望能够通过其STI类型在一个以某类模型为目标的作用域上调用build方法,并让ActiveRecord构建一个正确类的实例。 class LineItem < ActiveRecord::Base scope :discount, where(type: 'DiscountLineItem') end class DiscountLineItem LineItem.discount.build # Expect an instance of DiscountLineItem here => # 在这里,我期待一个DiscountLineItem的实例,而不是LineItem一个实例。

子类的不同视图

我正在使用STI子类,并希望为不同的子类指向不同的视图。 目前我正在将子类主题路由到主类文章,如下所示: resources :topics, :controller => ‘articles’ 有没有简单的方法来指导不同的观点? 编辑 我发现这样做的最好方法是:

使用STI的Rails应用程序 – 最简单的方法来提取这些记录?

我正在学习Rails的方法,正在开发一个示例应用程序来跟踪啤酒食谱。 我有一个名为Recipe的模型,它保存了食谱名称和效率。 我有一个名为Ingredient的模型,它正在使用STI – 它被分类为Malt,Hop和Yeast。 最后,为了链接食谱和成分,我使用一个名为rec_items的连接表,它保存recipe_id,ingredient_id和特定于该配方/成分组合的信息,例如金额和煮沸时间。 一切似乎都运作良好 – 我可以使用Malt.all找到我所有的麦芽,以及使用Ingredient.all的所有成分。 我可以使用@ recipe.ingredients等找到配方的配料…… 但是,我现在正在研究我的食谱展示视图,并且对于完成以下内容的最佳方法感到困惑: 我想显示配方名称和相关信息,然后列出成分,但按成分类型分隔。 因此,如果我有一个黑色IPA @ 85%的效率,它有5个麦芽和3个啤酒花品种,输出将类似于: BLACK IPA (85%) Ingredient List MALTS: malt 1 malt 2 … HOPS: hop 1 … 现在,我可以拉@ recipe.rec_items并迭代它们,测试每个rec_item.ingredient的类型==“Malt”,然后对跳跃做同样的事情,但这似乎不是Rails-y也不高效。 那么最好的方法是什么? 我可以使用@ recipe.ingredients.all来提取所有成分,但不能使用@ recipe.malts.all或@ recipe.hops.all来提取这些类型。 我应该使用不同的语法吗? 我应该使用@ recipe.ingredient.find_by_type(“麦芽”)吗? 在控制器中执行此操作并将集合传递给视图,或在视图中正确执行此操作? 我是否还需要在Hop和Malt模型中指定has_many关系? 我可以使用条件语句或find_by_type以我想要的方式工作,但我的重点是以尽可能少的DB开销执行“Rails方式”。 谢谢您的帮助! 目前的简单代码: Recipe.rb class Recipe :rec_items end Ingredient.rb class Ingredient :rec_items […]

Rails STI和“type”字符串的设置

我想我需要在Rails中使用STI。 这是我的class级: class Person < ActiveRecord::Base end class Landlord < Person end 和people表有一个:type列,它是一个字符串。 所以,我期望在表中看到的是,作为Person的每一行都将类型设置为“Person”,并且每个Landlord都将类型设置为“Landlord”。 但是,这不是我所看到的。 每个房东的类型都设置为“Landlord”,但所有Person的类型都设置为nil。 这很好可能是rails的工作方式,但我只是在寻找一些确认。

MySQL复合索引中的键的高性能排序(WRT Rails多态关联和STI)

以前,我在ActiveRecord中询问了关于多态外键的复合索引的问题 。 我的问题的基础是我的理解,索引应该基于列的基数,并且在Rails的STI类型和多态_type列上通常具有相当低的基数。 接受我的问题的答案是正确的 – 将高基数_id列和低基数_type列编入索引是有价值的,因为它们一起具有高基数 – 我的下一个问题是:你应该如何订购你的化合物索引? [owner_id,owner_type]的索引首先放置具有较高基数的字段,而[owner_type,owner_id]将具有较高基数的字段放置在第二位。 使用前一个键的查询是否比使用后一个键的查询更高效,或者它们是否同样高效? 我问,因为这对我如何为服务STI模型的表订购复合键有特别的影响。 STI Rails查找器几乎总是查询类型列 – 这也是一个通常低基数的列。 因此,比其他索引更频繁地查询类型列。 如果更频繁地查询类型列,那么使用类型前导索引可能是有意义的,因为较少特定的查询可以利用索引的第一部分来产生性能提升。 但是,对于高度特定的查询而言,我不会因为性能的损害而小费。 利用索引的高基数部分。

Rails – 单表inheritance与否是申请人/员工关系

我正在开发一个招聘应用程序,用于存储面试人员的记录。 所以我有两个模型 – 申请人和员工,看起来像OO意义上的一个。 即员工早先是申请人。 因此我打算创建一个单表inheritance,如: 申请人<人 员工<人员 申请人的所有领域都在员工中。 员工还有其他几个不在申请人中的领域。 我对这个计划是否正确。 我有另一个类似的场景要处理 – 潜在客户和客户。 更新:随着我越来越多地与STI合作,我开始不喜欢它。

STI和form_for问题

我使用单表inheritance来管理不同类型的项目。 楷模: class Project < ActiveRecord::Base end class SiteDesign < Project end class TechDesign < Project end 从projects_controller编辑动作: def edit @project = Project.find(params[:id]) end 查看edit.html.erb: {:controller => “projects”,:action => “update”}) do |f| %> … 更新projects_controller的操作: def update @project = Project.find(params[:id]) respond_to do |format| if @project.update_attributes(params[:project]) @project.type = params[:project][:type] @project.save flash[:notice] = ‘Project was successfully updated.’ […]