如何在 liquid 模板中使用 ransack 搜索多个模型
How to search multiple models with ransack in liquid templates
我正在尝试在视图中具有液体模板的 rails 应用程序中实现对 3 个模型的搜索搜索。到目前为止,我已经能够实现对一个模型的搜索。
在我的搜索控制器中,我有;
class SearchController < ApplicationController
def index
@courses = Course.ransack(params[:q])
# @teachers = Teacher.ransack(params[:q])
# @articles = Article.ransack(params[:q])
end
end
我的 search.html.liquid 是空的,因为我希望搜索栏显示在导航栏中。所以在我的 navbar.html.liquid 中,我包含了这个;
<form class="search" method="get" action="{{ request.url_helpers.courses_path }}">
<input type="text" placeholder="Search" name="q[title_cont]" value="" />
<input type="submit" value="Search" />
</form>
在我的 routes.rb 中,我有
resources :search, only: [:index]
就像我之前提到的,搜索适用于课程模型,但我也想包括教师和文章模型。对于 Teacher 模型,我想为 Article 模型搜索字段 "firstname_cont" 和 "title_cont"。
如何将对所有 3 个模型的搜索合并到一个适用于 liquid 模板的搜索表单中?
这个答案与 ransack
部分有关,因为我没有使用液体的经验,而且它似乎与手头的问题无关
我假设如下
class Course < ApplicationRecord
belongs_to :teacher
has_many :articles
end
您应该能够使用像 title_or_teacher_firstname_or_articles_title_cont
这样的复合属性链,例如
<form class="search" method="get" action="{{ request.url_helpers.courses_path }}">
<input type="text" placeholder="Search" name="q[title_or_teacher_firstname_or_articles_title_cont]" value="" />
<input type="submit" value="Search" />
</form>
此外,您的控制器代码传统上表示为:
class SearchController < ApplicationController
def index
@q = Course.ransack(params[:q])
@courses = @q.result
end
end
我正在尝试在视图中具有液体模板的 rails 应用程序中实现对 3 个模型的搜索搜索。到目前为止,我已经能够实现对一个模型的搜索。 在我的搜索控制器中,我有;
class SearchController < ApplicationController
def index
@courses = Course.ransack(params[:q])
# @teachers = Teacher.ransack(params[:q])
# @articles = Article.ransack(params[:q])
end
end
我的 search.html.liquid 是空的,因为我希望搜索栏显示在导航栏中。所以在我的 navbar.html.liquid 中,我包含了这个;
<form class="search" method="get" action="{{ request.url_helpers.courses_path }}">
<input type="text" placeholder="Search" name="q[title_cont]" value="" />
<input type="submit" value="Search" />
</form>
在我的 routes.rb 中,我有
resources :search, only: [:index]
就像我之前提到的,搜索适用于课程模型,但我也想包括教师和文章模型。对于 Teacher 模型,我想为 Article 模型搜索字段 "firstname_cont" 和 "title_cont"。
如何将对所有 3 个模型的搜索合并到一个适用于 liquid 模板的搜索表单中?
这个答案与 ransack
部分有关,因为我没有使用液体的经验,而且它似乎与手头的问题无关
我假设如下
class Course < ApplicationRecord
belongs_to :teacher
has_many :articles
end
您应该能够使用像 title_or_teacher_firstname_or_articles_title_cont
这样的复合属性链,例如
<form class="search" method="get" action="{{ request.url_helpers.courses_path }}">
<input type="text" placeholder="Search" name="q[title_or_teacher_firstname_or_articles_title_cont]" value="" />
<input type="submit" value="Search" />
</form>
此外,您的控制器代码传统上表示为:
class SearchController < ApplicationController
def index
@q = Course.ransack(params[:q])
@courses = @q.result
end
end