2014-10-16 2 views
0

Я пытаюсь добавить User_id в созданный заголовок фильма, чтобы я мог показывать только названия фильмов, созданные пользователем в его профиле.Добавление активного User_id в заголовок

Я сделал несколько вещей, но когда я создаю новый заголовок (как зарегистрированный пользователь), а затем проверяю консоль рельсов, чтобы увидеть, есть ли у этого фильма User_id, он говорит «nil». Так что, похоже, я сделал что-то неправильно или забыл что-то сделать.

Это моя схема, я уже была модель фильма, так что я использовал rails g migration addUserIdToMovies user_id:integer добавить User_ID модели Фильмы

ActiveRecord::Schema.define(version: 20141016152516) do 

    create_table "movies", force: true do |t| 
    t.string "title" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
    end 

    create_table "users", force: true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "password_digest" 
    t.string "remember_digest" 
    end 

    add_index "users", ["email"], name: "index_users_on_email", unique: true 

end 

Я добавил has_many и belongs_to для пользователя и Movie модели

модель пользователя

class User < ActiveRecord::Base 

    has_many :movies 

модель Movie

class Movie < ActiveRecord::Base 

    belongs_to :users 

Вопрос в том, почему я не получаю User_id в своем фильме collumn User_id, когда я публикую новый фильм как зарегистрированный пользователь?

+0

Является ли ваш вход в систему сессиями? – sabrams

ответ

1

Если вы используете сессии для отслеживания пользователей, которые в настоящее время вошли в систему, вы можете создать простой метод в контроллере приложения, как это:

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) 
    return @current_user 
end 

и призывают к ней в создании действия Вашего фильма контроллер

def create 
    @movie = Movie.new(params[:movie]) 
    @user = current_user 
    user_id = @user[:id] 
    @movie[:user_id] = user_id 

    respond_to do |format| 
     if @move.save 
     format.html { redirect_to @movie, notice: 'Movie was successfully created.' } 
     format.json { render json: @movie, status: :created, location: @movie } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @movie.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

Является ли этот метод лучше, чем метод таблицы соединений, показанный здесь http://railscasts.com/episodes/47-two-many-to-many? –

+0

Что делает смысл, не могли бы вы указать, как я буду показывать только фильмы, сделанные пользователем на его странице профиля? Прямо сейчас я использую '@movies = Movie.all' в пользовательском контроллере с этим кодом в моем представлении' - @ movies.each do | movie | = movie.title' –

+0

Найденный! '@movies = @ user.movies' это получает все фильмы, отправленные пользователем! –

Смежные вопросы