2012-08-09 95 views
4

好吧,开始学习rails,当然也是通过用个人博客(livejournal等)编写服务开始的。我有职位脚手架和用户模型(感谢设计)。现在我试图通过某些用户在/ url中显示/ username/posts之类的所有帖子,但实际上无法理解如何制作这种rails方式。 早在路线在rails中显示特定用户的博客文章

resources :users do 
    resources :posts 
end 

作出嵌套资源和连接的用户和后型号

has_many :posts 

belongs_to :user 

我应该为用户创建控制器或不?有没有适当的方法呢?

P.S.感谢你的回答。试图学习铁轨,但几乎所有我发现的教程都以脚手架结尾,这不是很有帮助。

编辑1:感谢“匹配”的想法,我解决了一半的问题。另一个(未解决)一半选择由特定用户写入

编辑2帖子:添加

@user = User.where(:username => params[:username]) 
@posts = @user.posts 

到控制器,但是我有“未定义的方法`帖子”中的帖子控制器错误。

回答

3

当您使用where时,您将从查询中获取一个对象数组,而不是单个对象。
因此,您的@user变量上没有posts方法。
也许你应该改变这样的事情,只有一个user检索:

@user = User.find_by_username(params[:username]) 

这样,你只有一个user查询,你可以使用.posts relashionship没有错误。

+0

哇,谢谢!你真的救了我从另一天无用的搜索! – Nausik 2012-08-09 17:59:25

+0

总是乐于提供帮助。 – MurifoX 2012-08-09 18:03:26

1

当使用

resources :users do 
    resources :posts 
end 

你最终将不得不像URL '/用户/ 1 /帖'

首先要在ID的情况下,你需要写

def to_param 
    self.username 
end 
用户名用户模型中为

或者,如果你不想让你的网址是/用户/:ID /职位,你可以使用匹配

match ':username/posts' ,'posts#show' 

,将带你到岗位控制器和显示操作创建一个路由的URL。

+1

关于控制器,你应该在PostsController中做一个before_filter,以便从用户名获得用户名,以便在每个动作中都可以访问它,所以它是Dryer然后在每个动作中都这样做的 – 2012-08-09 17:37:26

+0

谢谢你的回答! “匹配”的想法真的帮助了我,但我真的无法理解如何选择仅来自某个用户的帖子 – Nausik 2012-08-09 17:37:32