在我的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
端
用于登录和注销用户的文章可以轻松路由以显示特定用户的文章。欢迎提出清洁建议。
答案 0 :(得分:2)
最好的方法是使用Article
作为路径文件中的资源:
resources :articles
执行此操作,您必须创建一个ArticleController
并使用路径/articles
,您将被重定向到一组新视图,这些视图将加载所有文章而不处理他们来自的用户。例如。在此控制器的index
操作中:
def index
@articles = Article.all
end
这是在Ruby中处理REST接口的最佳方法,因为您在此处仅查询Article
资源,并且不应该通过User
资源。