【问题标题】:Adding a wildcard to Rails route向 Rails 路由添加通配符
【发布时间】:2013-12-10 04:35:17
【问题描述】:

在我的 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)我向他们显示他们的文章。

更新

不确定这是否太 hacky,但这是我当前的索引方法。它可以像我想要的那样工作,但它可能会被简化:

  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

结束

文章可供登录和注销的用户使用,通过简单的路由来显示特定用户的文章。欢迎提出清洁建议。

【问题讨论】:

  • 文章有一个:class Article < ActiveRecord::Base belongs_to :user end
  • 您尝试做的事情是可能的,但您应该创建索引并显示方法以使其成为 RESTful。索引用于“全部”,显示用于单个记录。请参阅第 2.2 节。http://guides.rubyonrails.org/routing.html

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


【解决方案1】:

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

resources :articles

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

def index
  @articles = Article.all
end

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2011-07-07
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多