我对Ruby很新,并且不知道这样做。我需要根据2个表创建一个选择:A和B.两者都是ActiveRecord。
public enum City implements BaseEnumInterface {
TOKYO(0), NEWYORK(1);
private final int key;
public static Set<Integer> fromValue(Set<City> enums) {
return enums.stream().map(City::getKey).collect(Collectors.toSet());
}
public int getKey() {
return key;
}
private City(int key) {
this.key = key;
}
}
public enum Country implements BaseEnumInterface {
USA(0), UK(1);
private final int key;
public static Set<Integer> fromSet(Set<Country> enums) {
return enums.stream().map(Country::getKey).collect(Collectors.toSet());
}
public int getKey() {
return key;
}
private Country(int key) {
this.key = key;
}
}
public class EnumUtility {
public static <E extends Enum<E> & BaseEnumInterface> E fromKey(Class<E> enumClass, Integer key) {
for (E type : enumClass.getEnumConstants()) {
if (key == type.getKey()) {
return type;
}
}
throw new IllegalArgumentException("Invalid enum type supplied");
}
public static <E extends Enum<E> & BaseEnumInterface> Set<Integer> fromSet(Class<E> enumClass, Set<E> enums) {
return enums.stream().map(BaseEnumInterface::getKey).collect(Collectors.toSet());
}
}
interface BaseEnumInterface {
int getKey();
}
public class EnumTester {
public static void main(String args[]) {
System.out.println(EnumUtility.fromKey(Country.class, 1));
}
}
有class A < ActiveRecord::Base
belongs_to :b
end
class B < ActiveRecord::Base
has_one :a
end
条记录没有关联A
条记录。我想得到这些问题的记录。
答案 0 :(得分:4)
答案 1 :(得分:3)
您可以使用与以下内容关联的B记录检索A记录:
A.joins(:B)
如果您需要所有与B没有关联的A记录,您可以执行:
A.where(B: nil)
答案 2 :(得分:2)
嗯......你可以做点什么,
unassociated_ids = A.pluck(:id) - B.pluck(:a_id).uniq
A.where(id: unassociated_ids)
希望有所帮助......
答案 3 :(得分:2)
在Rails中,belongs_to
关联意味着表a
有一个名为b_id
的字段。这意味着A
表可以直接访问它与B
的关联。
要获取没有A
附加B
的{{1}}条记录,请运行A.where(b_id: nil)
,这将返回所有A
条记录的数组,而不包含B
编辑:正如coorasse所述,您也可以运行A.where(b: nil)
,Rails将其解释为A.where(b_id: nil)
。