根据铁路

时间:2017-07-30 10:51:17

标签: ruby-on-rails

我有3个型号。用户,语言,链接。链接属于用户和语言。我想在主页上创建一个前五种最活跃的语言列表。所以我想按照在该语言下发布链接的不同用户数量的降序排出五种语言。

例如。 Spanish有6个链接,全部由3个不同用户发布。 Moroccon有7个链接由2个不同用户发布。 French有5个不同用户发布的5个链接。

所以语言的顺序必须是法语,西班牙语,摩洛哥语。

以下是每个对象的模型: -

class User < ApplicationRecord
  has_many :links

class Language < ApplicationRecord
  belongs_to :user
  has_many :links

class Link < ApplicationRecord
  belongs_to :user
  belongs_to :language

我是rails的初学者,但我已经尝试了一下,看看它是如何完成的。

例如,我尝试了Link.select(:user_id).distinct.count,这会导致发布链接的唯一身份用户数量。但我不知道如何根据在该语言下发布链接的不同用户的数量来订购语言。非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

据我所知,语言通过链接有很多用户。因此,您可以将has_many关联添加到class Language has_many :users, through: :links end

users

然后在languages上离开加入Rails 5表格并按用户数量排序。

由于left_joins具有Language.left_joins(:users).group(:id).order("count(users.id) DESC").limit(5) 方法,因此可以通过以下方式执行:

left_joins

如果您不想显示没有链接的语言,joins可以替换为import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class New{ public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("ENTER THE ARRAY SIZE"); int n=in.nextInt(); System.out.println("ENTER THE ARRAY VALUES"); int[] a=new int[n]; String s=""; for(int i=0;i<n;i++) { a[i]=in.nextInt(); s=s+(char)a[i]; } List<String> hs=mac(s); System.out.println("THE COMBINATIONS ARE"); for(String str:hs) { char[] ch=str.toCharArray(); for(int i=0;i<ch.length;i++) { System.out.print((int)ch[i]); } System.out.println(); } } public static List<String> mac(String s) { List<String> ss=new ArrayList<String>(); if(s==null) { return null; } else if(s.length()==0) { ss.add(""); } else { String str=s.substring(1); char c=s.charAt(0); List<String> hs=mac(str); for(String st:hs) { for(int i=0;i<=st.length();i++) { ss.add(sru(st,c,i)); } } } return ss; } public static String sru(String s,char c,int i) { String start=s.substring(0,i); String end=s.substring(i); return start+c+end; } }