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 数据?

Rails 3 个不同的自动完成字段

我可以在rails中的单个页面中呈现两个不同的控制器操作

Rails friendly_id 不会在 heroku 上的现有用户上呈现

Rails Ajax - 渲染不同的部分