Я использую Devise, чтобы пользователи могли войти через Facebook или создать учетную запись на моем веб-сайте. Когда они регистрируются, они могут добавлять фильмы на свою главную страницу, проблема в том, что каждый пользователь видит все фильмы, а не только фильмы, которые они добавили.
В моем movie_controller.rb у меня есть,
def index
respond_with Movie.all
end
Моя модель movie.rb имеет
belongs_to :user
И моя модель user.rb имеет
has_many :movies
Два вопроса, на данный момент я использую Movie.all
который, очевидно, показывает все фильмы, что будет правильным синтаксисом для показа только фильмов, созданных пользователем. Второй вопрос: мне нужно вставить идентификатор пользователя в запись фильма?
Я использую 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.
def index
respond_with current_user.movies
end
Для второго вопроса: вы должны добавить user_id в таблицу фильмов. В противном случае вы не сможете получить список фильмов пользователя.
В качестве стандарта базы данных belongs_to :xyz
всегда должен присутствовать в db как xyz_id
чтобы получить все дочерние записи.
user_id
в моей таблице фильмов, но мне было интересно, нужно ли мне сохранять идентификатор в фильме, но кажется, что rails / devise делает это сам.
Как сказал Дипак, вы можете получить
1. все фильмы из фильма Movie.all
2. Текущий пользователь фильмы из фильма Movie.all
u определенно нужен идентификатор пользователя в фильмах для связи фильмов с пользователем
current_user.movies
загрузит фильмы, которые были зарегистрированы в данный момент. Да, вам нужно добавить столбец с именемuser_id
к вашей моделиMovie
.