我正在使用JavaScript前端构建Rails 5.0应用程序。 我想让我的用户在前端使用Form接口(例如过滤)获取项目列表时建立自己的查询。
例如:
Select Projects WHERE Status IS "pending" AND Title IS NOT "Building".
或
Select Project WHERE Status IS "approved" AND Title IS NULL.
我可以使用宝石吗?如何在后端使其动态(安全)?
感谢所有帮助!
更新
我想我可能已经找到了一个叫做Ransack的解决方案。好吗?
答案 0 :(得分:1)
如果您正在寻找一种让用户能够搜索项目状态的方法,则可以使用scope
。没有太多代码发布,所以我不知道您的控制器和模型被称为什么,但是我以Project模型为例。
在索引操作中添加
def index
@projects = Project.all
if params[:search].present?
@projects = @projects.by_status_and_title(params[:search])
end
end
在模型中创建范围
#
scope :by_status_and_title, ->(title_and_stats) { where('title LIKE ? OR status LIKE ?', "%#{title_and_stats}%","%#{title_and_stats}%" ) if title_and_stats.present? }
或者您可以创建单个范围
scope :by_status, ->(stats) { where('status LIKE ?', "%#{stats}%") }
scope :by_title, ->(t) { where('title LIKE ?', "%#{t}%") }
您认为将搜索参数传递给控制器
<%= form_tag(some_path, method: 'get', class: 'form-inline justify-content-center') do %>
<%= search_field_tag 'search', params[:search], class: 'form-control mb-2 mr-sm-3 mb-sm-0 input-width', placeholder: 'Search' %>
<%= submit_tag "Search", class: 'btn btn-primary btn-block-sm-down', :name => nil %>
<% end %>
答案 1 :(得分:1)
要进行此类内置查询,可以使用pacecar gem,它提供许多功能。