Rails 5 - 在不同的URL上呈现2个不同的发布顺序

时间:2018-03-02 18:14:38

标签: ruby-on-rails ruby-on-rails-5

我确信这很简单,但我是Rails的新手,只是无法通过Google搜索找到答案。

默认情况下我有一个帖子模型,它将按自定义算法排序(目前按asc排序)。我还想创建另一个视图,在 mydomain.com/recent

下按最新排序

我不希望通过ajax或其他任何方式完成此操作。我只是希望能够在不同的url路径上显示不同的视图。

posts_controller.erb

 def index
   @posts = Post.order('created_at ASC').paginate(:page => params[:page], :per_page => 15)
   respond_to do |format|
     format.html
     format.js
   end
 end

index.html.erb

<%= render @links %>

1 个答案:

答案 0 :(得分:1)

您可以在模型中使用范围和控制器中的参数。

例如,如果您的模型具有以下范围:

class Post
  # Move current controller custom order to scope
  scope :my_custom_order, -> { order(created_at: :asc }
  scope :recent_order, -> { order(created_at: :desc) }
end

如果您将URL的/recent部分作为routes.rb文件中的可选参数,例如:

scope '(:order)' do
  # Do all your routes to route to PostsController in here
end

然后在您的控制器中,您可以使用它来确定您的帖子订单,并默认返回您的自定义订单:

def index
  @posts = Post.send(order).paginate(page: params[:page], per_page: 15)
  respond_to do |format|
    format.html
    format.js
  end
end

private

def order
  :"#{params[:order] || 'my_custom'}_order"
end

通过一些调整以使其适合您的项目的某些方面应该让您开始实现您想要实现的目标。