在rails中显示某些用户的博客帖子

时间:2012-08-09 17:15:03

标签: ruby-on-rails ruby model-view-controller devise blogs

好吧,开始学习rails,当然首先是通过个人博客(类似livejournal)编写服务。我有帖子脚手架和用户模型(感谢Devise)。现在我试图用某个用户显示所有帖子,例如/ username / posts在url中,但实际上无法理解如何制作这种rails-way。 已在路径中创建嵌套资源

resources :users do 
  resources :posts 
end

并使用

连接用户和帖子模型
has_many :posts

belongs_to :user

我应该为用户创建控制器吗?有没有正确的方法呢?

P.S。谢谢你的回答。试图研究rails,但几乎每个我发现的教程都以脚手架结束,这不是很有帮助。

编辑1:由于“匹配”的想法,我解决了一半的问题。另一个(未解决的)一半是选择由某个用户写的帖子

编辑2:添加

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

对于控制器,但我在帖子控制器中有“未定义的方法`帖子'”错误。

2 个答案:

答案 0 :(得分:3)

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

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

这样您只能查询一个user,并且可以毫无错误地使用.posts关系。

答案 1 :(得分:1)

使用时

resources :users do
   resources :posts 
end

你最终会得到像'/ users / 1 / posts'

这样的网址

首先要有id的情况下你需要写的用户名

def to_param
  self.username 
end

在您的用户模型中。

或者,如果您不希望自己的网址为/ users /:id / posts,则可以使用匹配创建路径网址

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

将带您到posts控制器并显示操作。

相关问题