允许用户更改范围的顺序

时间:2017-09-03 17:49:29

标签: ruby-on-rails scope

我只使用过我的项目的静态默认作用域,而我最近想要创建一个动态作用域功能,用户可以点击按钮或使用下拉菜单更改他们查看的顺序名单。

到目前为止,我遇到了一些方法,例如使用取消绑定和设置新范围,并看到重新排序。我正在查看文档,但我也不确定如何让用户能够选择。我会在相应的HTML.erb文件中使用类似Link_to或button_to的东西吗?

在我的post.rb文件中,它看起来像这样

default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { reorder(title: :asc) }
scope :ordered_by_reverse_created_at, -> { reorder(created_at: :ASC)}

我在默认情况下添加了其他范围,因为我假设有人会设置他们想要的范围,一旦用户点击或从渲染页面中选择它,视图就会调用/激活它们。

post_controller.rb

def index
  @posts = Post.all
end

在我的index.html.erb视图中

我有以这种方式呈现的帖子列表,如果它不能与我想做的事情一起工作,有人可以告诉我更好的方法吗?

# <some way for user to choose those defined scopes and render the new page would go here> 
<% @posts.each do |post| %>
  <div class="media">
    <div class="media-body">
      <h4 class="media-heading">
        <%= link_to post.title, post %>
        <small> <%=  post.body %> </small>
      </h4>
    </div>
  </div>
<% end %>

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以做到这一点:

  1. 纯粹的前端,使用js。如果你不想编写自己的js插件(例如DataTables),你可以使用一些现有的js插件和排序功能。您可能需要制作一个包含可用于此的不同属性的表格。

  2. 后端,使用ajax。编写自己的或使用filterrific之类的东西,它使用范围进行过滤和排序。