ruby-on-rails 如何使用链接表中的列过滤rails索引页上的数据?

yquaqz18  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(144)

我正在寻找帮助添加一个搜索过滤器到现有的索引页面,通常显示在我的基因数据库中的所有家庭。
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表中的一列,而不是指向另一个表的链接。谢谢你,我希望我已经提供了足够的信息。杰雷

uoifb46i

uoifb46i1#

只需连接相关表并使用where进行搜索

def index
  if params[:search].present?
    @families = Family.joins(:people).where("people.first_name LIKE ?", params[:search])
  else
    @families = Family.order(params[:sort])
  end
end

有有用的gem ransack。使用它,您可以很容易地创建更强大的搜索字段

相关问题