创建客户Rails查询

时间:2018-12-30 18:41:42

标签: ruby-on-rails

我正在使用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的解决方案。好吗?

http://ransack-demo.herokuapp.com/users/advanced_search

2 个答案:

答案 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,它提供许多功能。