1

我正在制作一个 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。

4

1 回答 1

0

经验法则是嵌套资源不要超过两层,否则您将太忙而无法照顾它们(忘记来源,也许来自我的经验

对于您的情况,我建议不要为照片设置嵌套资源。(或将其设置为嵌套在用户下)

resources project do
  resources posts
end

resources photo

然后建模

class User < ActiveRecord::Base
  has_many :photos
  has_many :projects
end

这在现实世界中也很有意义。一个帖子在一个项目下,这是合理的。但是照片呢?如果你有一张照片可以在一个帖子中展示你的布局想法,以后的帖子可以再次使用这张照片吗?说客户想比较前后?绝对应该。因此,在合理的逻辑中,照片最好独立于帖子。

然后,你所有的问题现在都不是问题了。

添加:在评论中回答问题 在我看来,有三种方法可以将帖子与照片关联(而不是关联):

  1. 在帖子内容中插入照片ID,这是最优选的,通过这个帖子作者可以控制照片的位置。无需关联。

  2. 多对多关系。有点复杂。

  3. 在 post 中使用序列化列来存储它提到的照片 ID 数组。

另一种方法是您的方法,发布 has_many 照片。在这种情况下,照片将具有 FIXED post_id 并且无法在其他帖子中调用。如果结果可以接受,您可以这样做。但即使这样,您也不需要嵌套资源。

于 2013-08-25T14:00:11.010 回答