如何将其他控制器/表中的数据导入一个列表?

时间:2012-02-03 17:28:25

标签: ruby-on-rails ruby-on-rails-3

我有一个用户注册和登录的rails项目。用户将创建“音乐”,因此我有一个“音乐”控制器,用户将填写标题,并上传他们的MP3。每个用户都可以这样做 - 这是花花公子。

当用户登录时,我希望他们在http://example.org/explore的好列表视图中查看每个人上传的音乐。我将在这个“探索”页面的侧边栏上的某个地方,在其他一些功能中,有一些“自上次登录以来的最新添加内容”。

我的问题是,我是否应该创建一个名为“Explore”的控制器,并为此列表创建索引操作,如下所示?

class ExploresController < ApplicationController

  def index
    @music = Music.all
  end

  def show
  end
end

我认为这可能是正确的方法,但让“探索”控制器使用您通常在“音乐”控制器中看到的所有操作似乎很奇怪。音乐控制器将成为current_user的CRUD。

3 个答案:

答案 0 :(得分:1)

它看起来并不像Rails。

使用inherited_resources gem使用相同的音乐控制器(如果它只是一个CRUD has_scope)并使用cancan管理用户访问权限。

这样你就有了5行MusicController,没有任何额外的控制者

答案 1 :(得分:1)

您可以轻松地向所有人提供music#index方法,并将用户身份验证放在CRUD方法上。这样每个人都可以在/music页面上看到所有上传的音乐,但只有每个人的所有者都可以改变它们。

如果用户需要一种简单的方法来查看使用自己的mp3的列表,那么您可以使用嵌套资源,因此可以在/users/:id/music使用。

如果您需要有关如何实施这些内容的更多信息,请发表评论。具体情况取决于您使用的身份验证系统(如果有)。

答案 2 :(得分:0)

向音乐控制器添加“探索”动作是完全正常的。

关于是否需要新控制器,您想到的探索页面与音乐控制器中的功能有多少共同之处?他们可以分享部分和帮助吗?他们会使用相同的回调吗?

如果您的唯一计划是在新控制器中列出所有其他模型,如图所示,那么我会说答案很简单:保留在音乐控制器中。