4

好吧,开始学习 Rails,当然是从编写个人博客服务开始(比如 livejournal)。我有帖子脚手架和用户模型(感谢设计)。现在我试图在 url 中显示某个用户的所有帖子,例如 /username/posts ,但真的不明白如何制作这种rails-way。已经在路由中创建了嵌套资源

resources :users do 
  resources :posts 
end

并连接用户和帖子模型

has_many :posts

belongs_to :user

我应该为用户创建控制器吗?有什么合适的方法吗?

PS谢谢你的回答。尝试学习rails,但我发现的几乎所有教程都以脚手架结尾,这不是很有帮助。

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

编辑2:添加

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

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

4

2 回答 2

3

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

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

这样你只有一个user查询,你可以使用.postsrelashionship 而不会出错。

于 2012-08-09T17:54:34.830 回答
1

使用时

resources :users do
   resources :posts 
end

你最终会得到像'/users/1/posts'这样的网址

首先要有用户名,如果你需要写 id

def to_param
  self.username 
end

在您的用户模型中。

或者,如果您不希望您的 url 是 /users/:id/posts ,您可以使用 match 创建一个路由 url

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

这将带您到帖子控制器并显示操作。

于 2012-08-09T17:23:04.737 回答