Tag: activerecord

基于字段的嵌套模型的条件顺序

我有一个具有很多结果的事件模型。 我想根据Event中的字段来排序结果。 我目前在活动中: has_many :results, :dependent => :destroy, :include => [:event], :order => “IF(self.etype = ‘Stroke’, ‘results.score ASC’, ‘results.score DESC’)” ……但这不起作用。 例如,使用named_scope有更好的方法吗? 对不起我的愚蠢,我是Rails的新手。

在Rails应用程序中混淆ID

我试图模糊离开服务器的所有ID,即ID出现在URL和HTML输出中。 我写了一个简单的Base62 lib,它有方法编码和解码。 定义或更好地覆盖ActiveRecord的id方法以返回id的编码版本,并调整控制器以使用解码的params[:id]加载资源,从而得到所需的结果。 现在,id在URL中编码为base62,响应显示正确的资源。 现在我开始注意到通过has_many关系定义的子资源没有加载。 例如,我有一个名为User的记录has_many Post s。 现在User.find(1).posts为空,尽管有些post的user_id = 1 。 我的解释是,ActiveRecord必须将Post的user_id与User的方法 id进行比较 – 我已经覆盖了 – 而不是与self[:id]进行比较。 所以基本上这使得我的方法毫无用处。 我想要的是在模型中定义obfuscates_id并且其余部分将被处理,即在适当的位置进行所有编码/解码并防止服务器返回id。 有没有可用的gem或有人有提示如何实现这一目标? 我敢打赌,我不是第一个尝试这个的人。

命名范围仅搜索连接表的第一个结果

我在使用命名范围时遇到问题,SQL不是我的强项。 我想返回所有机器,它已经进行了最后一次测试失败。 我的机器型号: has_many :lodged_tests, :dependent => :destroy has_one :last_test, :class_name => ‘LodgedTest’, :order => ‘created_at DESC’ named_scope :last_test_failed, :joins => :last_test, :conditions => [ “lodged_tests.is_passed = ?”, false] named_scope确实有效,除了它返回任何失败测试的机器。 我需要它来返回只有最近(最后)测试失败的机器。 下面链接到我正在尝试做的快速图表。 命名范围图 任何帮助都会非常感谢。

Ruby on Rails加入表关联

我有一个Ruby on Rails应用程序设置如下: 用户模型 has_and_belongs_to_many :roles 榜样 has_many :transactions has_and_belongs_to_many :users 交易模型 belongs_to :role 这意味着使用名为roles_users的连接表,这也意味着用户只能看到通过角色分配给它们的事务,用法示例: user = User.find(1) transactions = user.roles.first.transactions 这将返回与分配给用户的第一个角色关联的事务。 如果用户分配了2个角色,那么为了获得与第二个角色关联的事务,我会这样做: transactions = user.roles.last.transactions 我基本上试图找出一种设置关联的方法,这样我就可以根据用户和角色之间关联中定义的角色通过类似的方式获取用户的事务: user = User.find(1) transactions = user.transactions 我不确定这是否可行? 我希望你明白我想做什么。

连接表的ActiveRecord关系链接同一个表的两个记录?

我有一个角色模型和一个链接模型。 Link模型表示从角色到另一个角色的链接。 链接具有文本“描述”属性。 从字符A到字符B的链接与从B到A的相反链接不同。字符与另一个字符有零个或一个链接。 角色可以具有到不同角色的各种链接。 字符可以通过各种不同的字符链接。 我使用了使用Active Record关系来部分实现Character和Link模型之间的关系: class Character has_many :links # the links from the character to other characters class Link belongs_to :character # the character from which starts the link to another character 它给了我有用的方法,如character.links(从这个字符开始的所有链接的数组)或link.character(从中开始链接的字符) 链接模型还有一个to_character_id ,其中包含转到链接的角色的id。 因此,从字符A到字符B的链接是具有以下属性的实例: character_id =角色A的id to_character_id =字符B的id description =一些文字 我写了各种额外的方法,比如character.links_to (返回指向字符的所有链接的数组)或link.to_character (返回指向链接的character.characters_who_link_to ),或者character.characters_who_link_to (返回另一个的数组)带有此角色链接的字符)。 我还写了一个回调函数,以确保删除一个字符时,删除所有转到此字符的链接(恢复时也是如此)。 是否可以使用额外的AR关系声明来为我提供这种额外的方法,这样我就不必自己写那些方法和回调了? 使用Rails的Agile Web开发在“使用模型作为连接表”一节中提供了一个解决方案,但是对于连接两个不同表的连接表。 […]

Rails有活跃记录一次性获取所有需要的关联吗?

我有一个模型评论,其中有一个用户。 在我的显示页面中,我正在做一个Comment.all ,然后显示每个评论。 在视图中,我不仅需要显示注释,还需要显示关联用户(即作者)的信息。 …etc… 这很好,所有,但activerecord将其转换为一个SELECT * FROM users WHERE USER.id = commentId查询每个EACH评论我有。 这有点荒谬,特别是在有数百条评论的页面上。 (那是数百个单独的DB命中!) 当我在做Comment.all时,有没有告诉rails不仅要抓取评论,还要抓住相关用户,然后当我稍后调用comment.user.blah时,为了不再从db中获取它? (这样它就可以在一个db语句中完成所有操作)。

在has_many关联中为“no children”创建named_scope

我想为没有post的博客提供一个named_scope。 以下不起作用。 class Post < ActiveRecord::Base belongs_to :blog end class Blog “blogs.id NOT IN (SELECT blog_id FROM posts)” end

在使用连接表时,如何处理重复的副作用 – 即回报友谊等

在rails中使用连接表总是会给我带来麻烦,特别是在假定往复时必须创建重复的条目。 即我添加某人作为朋友,我自动成为他们的==需要两个连接。 拿一个简单的收据应用程序,跟踪两个人,谁花了什么。 用户可以拥有多个朋友。 对于每个FRIEND,他们可以跟踪多个TABS(即用于杂货的标签,另一个用于账单等),每个TABS由USER添加多个RECEIPTS。 所以在这种情况下,我需要一个FRIENDSHIP表,如果我假设当一个用户将另一个用户声明为朋友时,我需要创建两个友谊,这个手势是回报的。 这就是我的问题。 我需要将共享TAB链接到两个FRIENDSHIPS。 这基本上是在说 友谊有很多标签,标签有很多友谊。 这涉及另一个联接表…我是对的吗? 它似乎有很多重复,我想知道是否有更好的方法来做到这一点,或者你如何在你的代码中妥善处理这个? 你是否创造了许多回调以确保何时对一个友谊做了什么,对另一个友谊又重复了什么?

Ruby on Rails使用filter值数组进行最佳搜索?

我有一个具体的例子,但一般的问题是:当你有一个匹配的过滤值数组时,什么是检索记录的最佳方法? 假设我有User和Post记录,其中User has_many :posts 我有一个看起来像这样的Relationship模型: class Relationship < ActiveRecord::Base belongs_to :follower, class_name: "User" belongs_to :followed, class_name: "User" validates :follower_id, presence: true validates :followed_id, presence: true end 我想编写一个函数,返回以下关注时间顺序的post – 也就是说,您关注的用户所关注的所有post都在关注,不包括您关注的任何人的重复和post。 我的解决方案是首先编译所有感兴趣的用户的数组: users = [] @user.following.each do |f| f.following.each do |ff| users << ff end end # dedupe users = users.uniq #remove self and following users.delete(@user) @user.following.each […]

Rails:如何创建多态关系/友谊模型

我想创建一个多态友谊/网络系统。 例如 用户可以请求或请求加入多个模型,例如: 公司 项目 组 联系人(朋友) 一些将是一对多,例如,一个公司雇用用户,但公司有许多雇员。 其他许多人,例如用户有许多项目,项目有很多用户 使用活动记录创建关系并不困难。 中间步骤,请求(邀请)让我感到困惑。 有点搞乱这是我想出来的。 下面的例子将允许我从一个配置文件(用户)向多个模型发出多边形的请求(甚至是一个单词?),包括配置文件模型本身。 这是Controller如何工作的示例。 @company = Company.find(params[:id]) @request = @company.requests.create!(status: “pending”).build_profile @request.profile = current_user 我怎样才能使@company更具动态性,比如说请求加入项目或个人资料(用户)的个人资料(用户)请求与另一个个人资料(用户)成为朋友? 所以我用控制器中的以下代码解决了这个小问题。 requests_controller.rb class RequestsController < ApplicationController before_filter :load_requestable def new @request = @requestable.requests.new end def create @request = @requestable.requests.new(params[:status]) if @request.save redirect_to @requestable, notice: "Request sent." else render :new end […]