我正在创建一个rails 4应用程序,用户可以在其中创建项目并向项目添加帖子。帖子将包含文字和带可选字幕的图片,因此我有一个照片模型可存储图片及其字幕。
用户有很多项目,项目有很多帖子,帖子有很多照片
我的路线看起来像这样:
resources :projects do
resources :posts
end
resources :posts do
resources :photos
end
current_user授权适用于项目和帖子,因为帖子与其中存储了user_id的项目直接相关。照片只能直接链接到帖子,所以我不能像在帖子控制器中那样做:
def set_project
@project = current_user.projects.find(params[:project_id])
end
是否有办法以类似的方式在照片上使用current_user,以便只有项目的作者可以添加,编辑,删除照片到他们的帖子?
目前在我的照片控制器中,我通过以下方式获得相关帖子:
def set_post
@post = Post.find(params[:post_id])
end
但显然没有current_user授权。我需要一些方法来找到帖子所属项目的ID,然后在照片控制器内使用current_user。
答案 0 :(得分:0)
经验法则是不要有两级以上的嵌套资源,否则你会太忙而无法照顾它们(忘记来源,也许是根据我的经验)
对于您的情况,我建议不要为照片设置嵌套资源。(或者将其设置为嵌套在用户下)
resources project do
resources posts
end
resources photo
然后模型
class User < ActiveRecord::Base
has_many :photos
has_many :projects
end
这在现实世界中也很有意义。一个帖子属于一个项目,这是合理的。但照片怎么样?如果你有一张照片在一个帖子中显示你的布局想法,未来的帖子可以再次使用这张照片吗?说客户想要比较之前和之后?绝对应该。因此,照片在合理逻辑上更好地独立于帖子。
然后,你现在所有的问题都不是问题。
添加:回答评论中的问题 在我看来,有三种方法可以将帖子与照片联系起来(不是关联):
在帖子内容中插入照片ID,这是最受欢迎的,通过这种方式,作者可以控制照片的位置。无需关联。
很多关系。有点复杂。
在帖子中使用序列化列来存储它提到的照片ID数组。
另一种方式是你的方法,发布has_many照片。在这种情况下,照片将具有FIXED post_id,并且无法在其他帖子中调用。如果结果可以接受,您可以这样做。但即使这样,您也不需要嵌套资源。