我正在寻找帮助添加一个搜索过滤器到现有的索引页面,通常显示在我的基因数据库中的所有家庭。
family表包含零个或多个father_id和零个或多个mother_id,它们指向描述一个人的Persons表。
下面是families控制器中的相关代码(在我让它工作之前进行了简化)。
def index
if params[:search]
@families = Family.where("Person.find('fam_fatherid').first_name like 'bob%'")
else
@families = Family.all.order(params[:sort])
end
这会导致语法错误。我还尝试了其他几种方法来访问数据,但都无济于事。例如:@families = Family.where(“fam_fatherid.firstname like 'bob %'”)。这不起作用,因为fam_fatherid是一个整数,而不是一个对象(我假设)。我得到的错误是:SQLite3::SQL异常:无此列:fam_fatherid.first_name
下面是people表的模式,只是为了验证first_name是一个有效的列。
CREATE TABLE "people" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name_prefix" varchar, "first_name" varchar, "middle_name" varchar, "last_name" varchar, "name_suffix" varchar, "date_of_birth" varchar, "date_of_death" varchar, "gender" varchar, "notes" varchar, "sync_outlook" varchar, "sync_phone" varchar, "flags" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "place_of_birth" varchar, "aliases" varchar);
这是模型:
class Family < ApplicationRecord
has_many :childlinks, foreign_key: "child_family"
has_many :people, through: :childlinks
# attempting to link parents
has_many :people, foreign_key: "fam_fatherid"
has_many :people, foreign_key: "fam_motherid"
end
如果有人能给我指出正确的方向,我将不胜感激。我几个月前才开始使用Rails,我不介意做研究,但到目前为止,我花了很多时间,似乎只是在兜圈子。我已经能够在people索引页中添加搜索,因为first_name(等)是Persons表中的一列,而不是指向另一个表的链接。谢谢你,我希望我已经提供了足够的信息。杰雷
1条答案
按热度按时间uoifb46i1#
只需连接相关表并使用
where
进行搜索有有用的gem ransack。使用它,您可以很容易地创建更强大的搜索字段