我创建了一个“文章”脚手架,并使用devise设置了用户身份验证。 我想创建一个显示特定用户所有文章的页面!创建一个页面以显示特定用户创建的内容
在我的文章索引列出了所有文章和创建它的用户的名称,我希望其他人能够点击此用户的名称并访问此页面显示此用户创建的其他文章!
非常感谢,我最近开始使用rails,并且尝试了很多方法来完成它,但我无法弄清楚这一点!
我创建了一个“文章”脚手架,并使用devise设置了用户身份验证。 我想创建一个显示特定用户所有文章的页面!创建一个页面以显示特定用户创建的内容
在我的文章索引列出了所有文章和创建它的用户的名称,我希望其他人能够点击此用户的名称并访问此页面显示此用户创建的其他文章!
非常感谢,我最近开始使用rails,并且尝试了很多方法来完成它,但我无法弄清楚这一点!
那么你想要的是属于用户的所有文章。
在你的用户模型中添加;
has_many :articles
并在文章模型中添加;
belongs_to :user
创建一个返回该用户所拥有的所有文章这样
@user_articles = User.find(user_id).articles
我想创建一个页面一个页面,显示由特定 用户创建的所有物品!
-
嵌套资源
要做到这一点,你通常会是最好的使用nested resource
(如识别父对象),但是当你正在使用devise
,我们有current_user
助手可用(意思是我们可以自然地使用控制器)
如果您要使用nested resources
方法,您可以这样做:
#config/routes.rb
resources :users do
resources :articles #-> domain.com/users/:user_id/articles/
end
这将允许你调用articles#index
方法在articles
控制器:
#app/controllers/articles_controller.rb
def index
user = User.find params[:user_id]
@articles = user.articles
end
这,当然,考虑到协会是acacia
建议:
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :articles
end
#app/models/article.rb
Class Article < ActiveRecord::Base
belongs_to :user
end
-
curre nt_user
current_user
是设计
创造了一个帮手这意味着你不需要使用嵌套的资源,你手头上已经有在user
对象。我会这样做:
#config/routes.rb
resources :articles #-> domain.com/articles
#app/controllers/articles_controller.rb
Class Articles < ApplicationController
def index
@articles = current_user.articles
end
end