我正在尝试将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?
答案 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