gpt4 book ai didi

ruby-on-rails - 我想为 ActiveRecord 创建 'second' , 'third' (可能高达 'ninth' )自定义方法,并可能将更改推送(贡献)到 rails

转载 作者:太空宇宙 更新时间:2023-11-03 16:33:09 28 4
gpt4 key购买 nike

我从来没有向开源项目提交过任何东西,坦率地说,我不在乎 Rails 的人们对这些方法的看法。我喜欢“last”和“first”方法,并希望将该概念扩展到“second”-“ninth”方法中,以便进行采样。

我如何创建自己的自定义方法来将这些方法移植到 ActiveRecord 上?

**目前正在 railscasts.com 观看 Ryan Bates 的截屏视频 #50

** 关于如何实现这一点的头脑 Storm ,我认为它可以遍历 :id 值(0、1、2、3、4 ...),直到找到下一条记录。然后“第三个”命令可以跳过第一个匹配项,直到找到第二个匹配项 (Model.third),依此类推。哈现在我想知道 .first 是否使用相同的方法。我想我会检查源代码。 :)

** 当我沿着这条路冒险时,我会留下一个相关链接列表(除非我得到 10 分,否则我不能列出超过 2 个链接。给我一个,这样我就可以添加更多)

http://railscasts.com/episodes/50-contributing-to-rails

http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html

最佳答案

它实际上比你想象的要复杂一点,因为firstlast 不是单独类上的单独方法,而是在ActiveRecord 中的许多不同类上实现的.

例如,

  • 您可以使用 Post.first,在这种情况下您调用 ActiveRecord::Base#first

  • 您可以使用 Post.where(:submitted => true).first,在这种情况下您调用 ActiveRecord::Relation#first

  • 您可以使用 Post.comments.first,在这种情况下您调用 ActiveRecord::Associations::CollectionAssociation#first

    <

看看这是怎么回事?为了使 secondthird 等具有类似的行为,您需要在多个地方而不是一个地方实现这些方法。

但为了让您开始,下面是您可以如何实现 ActiveRecord::Relation#second:

class ActiveRecord::Relation
def second
if loaded?
@records[1]
else
@second ||= limit(2).to_a[1]
end
end
end

例如,在初始值设定项中执行这段代码,然后突然间您对所有关系调用了 second

关于ruby-on-rails - 我想为 ActiveRecord 创建 'second' , 'third' (可能高达 'ninth' )自定义方法,并可能将更改推送(贡献)到 rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com