在Rails中按属性查找多个数据库对象?

时间:2014-07-08 03:56:19

标签: ruby-on-rails ruby activerecord

我有一个Track表和一个Section表。轨道有很多部分。 Section通过Section:track_id连接到各自的任务,track_id对应于Track的id属性。

<% @track = Track.find(params[:id]) %>
<% @sections = Section.find_by_track_id(@track.id) %>

在上面的代码中,我试图找到多个共享相同的部分:track_id属性,但find_by_track_id()只返回第一个。什么是获得所有这些的最好方法?

谢谢!

5 个答案:

答案 0 :(得分:6)

如果您的曲目和部分以这种方式相关,那么关联它们的最佳方式是使用自动从Rails关联中获得的方法。

在这种情况下,我希望在您的模型文件中,您有以下内容:

class Track < ActiveRecord::Base
   has_many :sections
end
class Section < ActiveRecord::Base
   belongs_to :track
end

然后你可以得到像这样的曲目的部分:

@track = Track.find(params[:id])
@sections = @track.sections

答案 1 :(得分:5)

您正在寻找where,它会查找满足特定条件的所有记录。

@sections = Section.where(track_id: @track.id)

这与您的问题无关,但您应在控制器中设置@sections@track。由于您似乎是Rails的新手,我强烈建议您阅读Rails Guides。他们将为您的旅程提供极大的帮助。

编辑:我正在解决一般问题“在Rails中按属性查找多个数据库对象?”,这是在一般情况下如何查找多个数据库对象。 @TarynEast的方法是找到sections的所有track的方法,或更一般地说,找到属于所需对象的所有对象。对于您要求的特定情况,请使用@ TarynEast的解决方案。

答案 2 :(得分:3)

<强>协会

要扩展Taryn East的答案,您需要查看ActiveRecord Associations

在您的模型中,如果您有以下has_many关系:

#app/models/track.rb
Class Track < ActiveRecord::Base
    has_many :sections
end

#app/models/section.rb
Class Section < ActiveRecord::Base
    belongs_to :track
end

enter image description here

这会在您的trackssections数据表之间建立relational database关联。

-

关联数据

Rails的魔力在这里发挥作用

当您调用“父”对象时,您将能够使用其primary key(通常是ID)找到它。当Rails自动将此primary_key用作子模型的foreign_key时,就会发生魔术 - 允许您将其所有数据作为附加到父对象的内容进行调用:

@track = Track.find params[:id] #-> find single Track by primary key
@sections = @track.sections #-> automagically finds sections using the track primary key 

这意味着如果您拨打以下电话,它将完全符合您的要求:

@sections.each do |section|
    section.name
end

<强>其中

最后,如果您想一次查找多条记录,则应确定应使用哪种ActiveRecord方法:

  • find是按id
  • 找到单个记录
  • finy_by key: "value"是按您定义的键/列
  • 找到单个记录
  • where将使用您自己的条件返回多个项目

因此,要回答您的基线问题,您需要使用where

@sections = Section.where track_id: params[:id]

这不是正确的答案,但它可以帮助您

答案 3 :(得分:-1)

    <% @sections=@track.sections%>

答案 4 :(得分:-1)

当您查找由其ID标识的特定元素时,请使用find。 Model.find正在使用主键列。因此总会有一个或没有结果。