创建一个页面以显示特定用户创建的内容

时间:2014-06-14 19:45:02

标签: ruby-on-rails devise user-controls

我创建了一篇"文章"脚手架和我已经设置了用户的身份验证。 我想创建一个页面,显示特定用户授予的所有文章!

在我的文章索引中列出了所有文章以及创建它的用户的名称,我希望其他人能够点击该用户的名称并访问此页面以显示该用户创建的其他文章! / p>

非常感谢,我最近开始使用rails,我尝试了很多方法,但我无法解决这个问题!

2 个答案:

答案 0 :(得分:2)

你想要的是所有属于用户的文章。

在您的用户模型中添加;

has_many :articles

并在文章模型中添加;

belongs_to :user

创建一个页面,返回用户拥有的所有文章,如此

@user_articles = User.find(user_id).articles

答案 1 :(得分:0)

  

我想创建一个页面,显示由特定文章创建的所有文章   用户!

-

嵌套资源

要做到这一点,您通常最好使用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

-

<强> CURRENT_USER

current_user是由Devise创建的助手

这意味着您不需要使用嵌套资源,因为您已拥有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