添加通配符到Rails路由

时间:2013-12-09 06:12:17

标签: ruby-on-rails ruby-on-rails-4

在我的Rails 4项目中,我有一条这样的路线(通过rake路线):

user_articles_path   GET     /users/:user_id/articles(.:format)  articles#index

这很好用,/users/1/articles显示用户1的文章。

从所有用户那里获取所有文章的最简单方法是什么?

/users/*/articles/users/all/articles这样的东西会很甜蜜。

这是Articlescontroller索引方法:

  def index
    @articles = if params[:user_id]
      user = User.find(params[:user_id])
      user.articles.where('content like ?', "%#{params[:search]}%").page(params[:page]).per_page(5)
    else
      current_user.articles.where('content like ?', "%#{params[:search]}%").page(params[:page]).per_page(5)
    end
  end

我根据用户/ ID显示文章,然后如果用户登录(通过Twitter),我会向他们展示他们的文章。

更新

不确定这是否过于苛刻,但这是我当前的索引方法。它的工作方式与我想的一样,但可能会简化:

  def index
    if current_user
      if params[:user_id]
        user = User.find(params[:user_id])
        @articles = user.articles.where('content like ?', "%#{params[:search]}%").page(params[:page]).per_page(5)
      else
        @articles = current_user.articles.where('content like ?', "%#{params[:search]}%").page(params[:page]).per_page(5)
      end
    else
      @articles = Article.all.where('content like ?', "%#{params[:search]}%").page(params[:page]).per_page(5)
    end

用于登录和注销用户的文章可以轻松路由以显示特定用户的文章。欢迎提出清洁建议。

1 个答案:

答案 0 :(得分:2)

最好的方法是使用Article作为路径文件中的资源:

resources :articles

执行此操作,您必须创建一个ArticleController并使用路径/articles,您将被重定向到一组新视图,这些视图将加载所有文章而不处理他们来自的用户。例如。在此控制器的index操作中:

def index
  @articles = Article.all
end

这是在Ruby中处理REST接口的最佳方法,因为您在此处仅查询Article资源,并且不应该通过User资源。