Rails 5 - 在不同的URL上呈现2个不同的发布顺序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 5 - 在不同的URL上呈现2个不同的发布顺序相关的知识,希望对你有一定的参考价值。
我确信这很简单,但我是Rails的新手,只是无法通过谷歌搜索找到答案。
我默认有一个帖子模型,它将按自定义算法排序(目前按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 %>
答案
您可以在模型中使用范围和控制器中的参数。
例如,如果您的模型具有以下范围:
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
通过一些调整以使其完全适用于您的项目的某些方面应该让您开始实现您想要实现的目标。
以上是关于Rails 5 - 在不同的URL上呈现2个不同的发布顺序的主要内容,如果未能解决你的问题,请参考以下文章
(Ruby,Rails,Javascript)禁用Javascript时重定向/呈现不同的页面......?
如何在 Rails 中控制器的一个操作中呈现不同的布局和 json 数据?