Tag: orm

searchkick索引相关的模型字段

我有一个rails应用程序,我正在从Sphinx切换到ElasticSearch并使用gem searchkick。 我有一个模型教师和模型标签(通过gem),教师可以有多个标签关联。 在Teacher模型中,我已经定义了这样的索引: def search_data { name: name, intro: intro, bio: bio, tag_name: tags.name } end Name,intro和bio是教师属性,但我想索引与教师关联的标签的名称。 我怎样才能做到这一点? 它现在的方式,它索引对象的名称(关系),我如何索引标签对象内的属性名称?

ActiveRecord是否使用命名约定“ID”为每个表分配密钥,如果是,为什么?

我的理解是,Actice Record基于Martin Fowler在他的“企业应用程序架构模式”(Addison-Wesley,2002)一书中描述的对象 – 关系映射(ORM)模式。 这表明数据库记录与在面向对象的程序(OOP)中表示它的对象之间存在一对一的映射关系。 当Rails创建者David Heinemeier试图为他的Rails框架实现ORM时,他将其基于Fowler的模式。 这就是问题,ActiveRecord是否使用命名约定“ID”为每个表分配代理主键,如果是,为什么? 我问的原因是,使用命名约定“tablename_ID”分配一个代理主键似乎更有意义; 事实上,在创建外键时,ActiveRecord会出现这种情况。 此外,是否可以覆盖默认配置,并使用命名约定“tablename_ID”分配代理主键; 因为特别是在主键的情况下,最好不要使用共享名称,因为如果只是查看列名称,则无法识别两列ID之间的区别:ID,ID,ID。 作为一个用例示例出现这种情况会出现问题,如果我将数据从两个表导出到一个表中,则会有两个具有ID名称的列; 当我用更新导入该文档时,似乎默认情况下无法映射ID列。

有没有办法确保ActiveRecord层次结构中每个记录有一个对象引用?

当我抓住一些分层的ActiveRecord结构时,似乎有很多数据库命中。 我使用:include选项改进了这一点,以尽可能多地充实结构。 即便如此,似乎ActiveRecord没有映射关系的对等方(例如父子)与对记录的唯一引用。 也就是说,我们获得了一个可导航的ActiveRecord结构,但据我所知,它不能保证给定记录的唯一副本。 node = Node.find(1, :include => {:document => :node}) node.object_id #A node.document.node.object_id #B although I expect/desire A 在ActiveRecord中不可避免? 还有其他人因为这样的缺点而转向其他ORM吗? (不要误解我的意思:ActiveRecord是一个很棒的工具。但是所有工具都有优点和缺点。) 假设我要编写自己的SQL查询(它甚至可以是存储过程)返回多个结果集(每个表一个),其中包含ActiveRecord层次结构的所有相关数据。 是否有一种无痛的方式,我可以显式映射关联,而不会让ActiveRecord错误地将我的显式映射误认为是为了创建新的关联?

幕后制作:ORM如何“思考”?

我对Rails ActiveRecord,Doctrine for PHP(以及类似的ORM)背后的一些设计感兴趣。 ORM如何设法实现链式访问器等function以及它们通常预期有多深? ORM如何在内部构建查询? ORM如何管理查询,同时维持所有预期的任意性质? 显然这是一个学术问题,但欢迎所有答案的性质! (我选择的语言是OO PHP5.3!)

现有的Rails模型,无需从数据库中获取它

有没有人知道是否可以创建模型实例并应用ID和任何其他属性而无需从数据库加载它? 我尝试这样做,但没有从数据库中获取关联:(任何想法? 编辑 我想要完成的只是这个: 从数据库中获取现有记录。 将记录的“哈希”输出存储到redis或其他一些内存存储中。 下次获取该记录时,首先获取缓存的存储,如果未找到,则转到步骤1。 如果存在缓存命中,则将所有缓存的属性加载到该模型中,并使该模型实例的行为就像它是从具有有限列的数据库中获取的模型一样。 这就是我被卡住的地方,我一直在做的是创建一个Model.new对象并手动设置每个参数。 这有效,但它将实例化的模型对象视为新记录。 ActiveRecord中必须有一个中间子程序来执行属性设置。

正确的模型数据结构? (我的第一个Rails应用程序)

我即将构建我的第一个Ruby on Rails应用程序(首先是xhtml和css之外的任何东西),我正在寻找一些有关模型结构的有用反馈。 我已经包含了一个模型来帮助可视化应用程序。 到目前为止我唯一需要的模型是: 1.一个电影模型(作为主要模型,命名电影,所以URL将看起来像,“sitename.com/movies/1-Willy-Wonka”)和 2. 用户模型 除了那些,我不知道该怎么做其他人; 比如’拍摄地点’,’演员’,最重要的是像’willy wonka’和’johnny depp’这样的属性。 我应该制作所有这些模型,甚至是属性吗? 如果是这样,是否可以并且建议让人们将模型创建为属性? 我尝试将应用程序视为由表单创建并存储在数据库中的数据,并且使用该pov我无法决定如何将属性(字符 actor)连接到部分(演员,拍摄地点,艺术品等)内部电影列表; 同时允许属性本身成为相关属性/电影/甚至部分的超链接:点击“史蒂文斯皮尔伯格”将带您进入他所参与的电影的页面,他导演,制作,撰写的电影等。 思考?

使用DataMapper而不是ActiveRecord

DataMapper的想法肯定比ActiveRecord好。 它有一个用于各种数据存储的API,包括RDBMS和NoSQL存储。 DataMapper比ActiveRecord更智能。 它具有“战略急切加载”。 此function单手消除“N + 1查询问题”。 此外,它允许延迟加载像Text属性这样的重字段。 DataMapper允许您通过提供嵌套的条件哈希来创建和搜索任何复杂的对象图。 ActiveRecods不适合用于生产中的关联。 include方法很丑陋且不可配置。 2010年10月,Josh Symonds 为此方法制作了一个补丁,允许将字段排除在急切加载之外。 但是这条路被忽略了,今天在rails3中我们有同样丑陋的包含方法。 即使在具有出色AREL的Rails3中,ActiveRecord也远不是最好的轨道。 你可能会说“哇,新的gem metawhere允许编写类似Article.where的好代码Article.where(:title.matches => ‘Hello%’, :created_at.gt => 3.days.ago) ”。 但等等…… DataMapper支持这个开箱即用! 也许而不是修改ActiveRecord看起来像DataMapper更好的是扩展和支持更好的orm? 有关DataMapper的更多详细信息,请访问http://datamapper.org/ 。 我认为,后来版本中的rails应该允许我们选择使用哪个orm,就像现在它允许数据库选择一样。 即使它只有一个选项“ActiveRecord”,人们也会搜索可用的替代品。 当我开始学习rails时,我认为只支持ActiveRecord。 后来我甚至没有尝试寻找别的东西。 为什么我要写这些东西? 我想,我们需要更加关注这个漂亮的ORM。 如果您是一些流行或不那么受欢迎的gem的开发者,请考虑添加对DataMapper的支持。 DataMapper社区应该从ActiveRecord或其他ORM编写一些迁移指南,并保持文档的最新状态,您可以帮助他们。 至于我,DataMapper社区需要更多人,你可能就是其中之一。 这个ORM的唯一缺点是缺少文档,你可以提供帮助。 那你觉得怎么样?

什么是与Ruby on Rails相关的ORM?

什么是ORM适用于Rails,它是什么意思?

使用一个查询在Rails中同时使用ActiveRecord更新多个记录?

假设我的Rails应用程序中有一个名为“user_products”的表和一个名为UserProduct的对应模型。 我的表中还有一个名为’is_temporary’的字段。 现在假设我想运行这样的查询,但使用ActiveRecord抽象层: UPDATE user_products SET is_temporary = false WHERE user_id = 12345; 有没有办法使用ActiveRecord做到这一点? 也许有些事情 UserProduct.find_by_user_id(12345).update_attributes(:is_temporary => false) 我想只运行一个查询才能实现。

Rails PG :: UndefinedTable:错误:缺少表的FROM子句条目

我有模特 class Offer < ActiveRecord::Base belongs_to :agency end class Agency < ActiveRecord::Base has_many :offers end 当我提出这样的要求时 – 一切都很好 @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). paginate(per_page: 10, page: params[:page]).decorate 但我想只选择属于active代理商的商品( agencies表中的列state ),所以我尝试这样做: @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). joins(:agency). where(agency: {state: ‘active’}). paginate(per_page: 10, page: params[:page]).decorate 完成此操作后,我收到错误PG::UndefinedTable: ERROR: missing FROM-clause entry for table “agency” 。 我的代码出了什么问题? […]