好吧,开始学习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
对于控制器,但我在帖子控制器中有“未定义的方法`帖子'”错误。
答案 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控制器并显示操作。