将活动User_id添加到标题

时间:2014-10-16 16:00:02

标签: ruby-on-rails activerecord

我正在尝试将User_id添加到已创建的电影标题中,以便我只能显示用户在其个人资料中创建的电影标题。

我做了一些事情,但是当我创建一个新标题(作为登录用户)然后检查rails控制台以查看该电影是否具有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添加到用户和电影模型

用户模型

class User < ActiveRecord::Base

  has_many :movies

电影模特

class Movie < ActiveRecord::Base

    belongs_to :users

问题是,当我以登录用户的身份发布新电影时,为什么我的电影片段User_id中没有获得User_id?

1 个答案:

答案 0 :(得分: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