【问题标题】:Only show users content只显示用户内容
【发布时间】:2015-08-26 09:57:14
【问题描述】:

我使用 Devise 让用户通过 Facebook 登录或在我的网站上创建帐户。当他们登录时,他们可以将电影添加到他们的首页,问题是每个用户都可以看到所有电影,而不仅仅是他们添加的电影。

在我的 movies_controller.rb 中,

def index
  respond_with Movie.all
end

我的 movie.rb 模型有

belongs_to :user

我的 user.rb 模型有

has_many :movies

两个问题,目前我正在使用Movie.all,它显然显示了所有电影,只显示用户创建的电影的正确语法是什么。第二个问题,我需要在电影记录中插入用户ID吗?

我使用 Angular 作为我的前端框架,

控制器,

  $scope.addMovie = function() {
    movies.create({
      title: $(event.currentTarget).parent().find('.title').text()
    }).then(init);
  };

还有服务,

.factory('movies', ['$http', function($http){
  return{
    create: function(movie){
      return $http.post('/movies.json', movie);
    }
  };
}]);

【问题讨论】:

  • current_user.movies 将加载当前登录用户的电影。是的,您需要将名为 user_id 的列添加到您的 Movie 模型中。

标签: ruby-on-rails angularjs devise


【解决方案1】:

在您的索引方法中,您正在获取所有电影。尝试仅获取 current_user 电影。

def index
  respond_with current_user.movies
end

第二个问题:您应该在电影表中添加 user_id。否则无法获取用户的电影列表。

作为数据库标准,belongs_to :xyz 应始终以xyz_id 的形式出现在数据库中,以获取所有子记录。

【讨论】:

  • 修复了它。为了澄清我已经在我的电影表中有user_id collum,但我想知道是否需要将 id 保存到电影中,但似乎 rails/devise 本身就是这样做的。
【解决方案2】:

正如 Dipak 建议的那样,您可以获得
1. Movie.all的所有电影
2. 当前用户Movie.all
中的电影 你肯定需要 电影 中的用户 ID 来将电影与用户联系起来

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2012-10-02
    • 1970-01-01
    • 2022-01-08
    • 2023-01-29
    相关资源
    最近更新 更多