我确信这很简单,但我是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
通过一些调整以使其完全适用于您的项目的某些方面应该让您开始实现您想要实现的目标。