我有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
,这会导致发布链接的唯一身份用户数量。但我不知道如何根据在该语言下发布链接的不同用户的数量来订购语言。非常感谢帮助。
答案 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;
}
}
。