Ruby on rails 如何在rails中编写多对多基查询
嘿,伙计们 我是rails新手,有很多让我大开眼界的东西,我写了一些代码,但似乎效率不高,我将代码粘贴到下面,你能帮我找到一个更好的方法来写这个吗 视频表:Ruby on rails 如何在rails中编写多对多基查询,ruby-on-rails,Ruby On Rails,嘿,伙计们 我是rails新手,有很多让我大开眼界的东西,我写了一些代码,但似乎效率不高,我将代码粘贴到下面,你能帮我找到一个更好的方法来写这个吗 视频表: class CreateVideos < ActiveRecord::Migration def self.up create_table :videos do |t| t.string :title t.string :desc t.string :tudou t.stri
class CreateVideos < ActiveRecord::Migration
def self.up
create_table :videos do |t|
t.string :title
t.string :desc
t.string :tudou
t.string :otherurl
t.timestamps
end
end
def self.down
drop_table :videos
end
end
这将返回所有列的数据,而不是我想要的唯一标题
由于只有一个名为“Jojo Mayer”的结果返回,但是返回值是activeRelation,所以我不能调用视频,所以我的解决方法是:首先获取视频实例,以便调用视频。我知道这绝对不是做这件事的方式
有什么建议吗 它们之间需要一个联接表,就像您推断的那样。但Rails中的连接表不必在迁移中创建。这只能在模型中完成
#drummer.rb
belongs_to :drummer_videos, :polymorphic => true
has_many :videos, :as => :drummer_videos
#video.rb
belongs_to :drummer_videos, :polymorphic => true
has_many :drummers, :as => :drummer_videos
确保drummer表
和video表
具有drummer\u videos\u id
属性
然后你可以打电话给你的鼓手
Drummer.where(:first_name => "Jojo", :last_name => "Mayer").videos.each {|t| t.title}
首先,如果您只想从视频中获取title属性,则应使用map或collect而不是each,因此如下所示:
Drummer.where(...).first.videos.map{ |t| t.title }
Video.joins(:drummers).where("drummers.first_name = 'jojo' AND drummers.last_name = 'Mayer'").map(&:title)
甚至更短:
.map(&:title)
其次,在我看来,如果你真的想从一个鼓手对象中获取所有视频,那么像你一样以某种方式使用first是一个不错的选择
否则,如果您想根据特定标准从不同的鼓手那里获取所有视频,那么您可能应该直接调用视频,然后加入或包括鼓手。也许是这样的:
Drummer.where(...).first.videos.map{ |t| t.title }
Video.joins(:drummers).where("drummers.first_name = 'jojo' AND drummers.last_name = 'Mayer'").map(&:title)
丹恩,你很好!你能给我推荐一些Rails教程或其他学习材料吗?谢谢,谢谢!大约一年前,我开始使用RoR,一开始,我只是关注谷歌搜索RubyonRails教程的一百万个结果之一。但随着我的进步,我发现对我来说,最好的想法来自于在这里查看StackOverflow,看看其他人在哪里问了什么以及他们得到了什么答案。太好了,感谢分享你的经验Hey Trip,据我所知,只有两种方法可以处理多对多关系,你的解决方案对我来说似乎是新的,我在哪里可以找到关于这个协会的参考资料,谢谢谢尔是一个伟大的铁路专家
Video.joins(:drummers).where("drummers.first_name = 'jojo' AND drummers.last_name = 'Mayer'").map(&:title)