嘿伙计我通过WatchList在用户电影之间设置了很多很多。这是一个搜索itunes api电影的应用程序,在这里我为用户添加了将搜索到的电影保存到个人列表的能力。我正在使用Rails 4.1.1和sqlite3。
class User < ActiveRecord::Base
has_secure_password
validates :email, presence: true, uniqueness: true
validates :name, presence: true
validates :password, length: { minimum: 6 }, allow_nil: true
has_many :watch_lists
has_many :movies, through: :watch_lists
def add_movie(movie)
self.movies << movie
end
class Movie < ActiveRecord::Base
has_many :watch_lists
has_many :users, through: :watch_lists
end
class WatchList < ActiveRecord::Base
belongs_to :user
belongs_to :movie
end
我的问题是当我尝试添加使用itunes id为DB:id的电影时。在第7行的saves_controller中,它为nil:NilClass抛出未定义的方法'name'。我无法弄清楚,没有什么是零?使用正确的信息,电影可以保存到db。当我尝试创建连接表时。什么是rails试图在???
上调用'name'第7行引发错误current_user.movies&lt;&lt; @movie =&gt;未定义的方法'名称为nil:NilClass
class SavesController < ApplicationController
def create
temp_movie = aquire_movie
@movie = Movie.new(temp_movie.local_db_movie_info_hash)
if @movie.save
current_user.movies << @movie #### => LINE 7 ERROR undefined methond 'name for nil:NilClass
redirect_to @movie
end
end
private
def aquire_movie
movie_data = itunes_results[:results][0]
TemporaryMovie.new(movie_data)
end
def itunes_results
data_retriever.get_data(params[:movie_id], search_by_id: true)
end
端
这也是架构。
ActiveRecord::Schema.define(version: 20150330012300) do
create_table "movies", force: true do |t|
t.string "title"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.string "password_digest"
t.string "auth_token"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "users", ["auth_token"], name: "index_users_on_auth_token"
add_index "users", ["email"], name: "index_users_on_email"
create_table "watch_lists", force: true do |t|
t.integer "movie_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
end
更新
我只是有一个朋友克隆这个回购,他没有问题所以它是某种宝石/数据库问题?
答案 0 :(得分:2)
所以我有点找到答案。 NoMethodError in CartsController#destroy - Agile Web Development with Rails 4
基本上更新了rails 4.1.1 =&gt; 4.1.2,错误消失了。 Active Record中的某种bug我相信它归结为什么。
当我运行rspec时,我也“收到警告:循环参数引用 - 反射”。这导致我上面的帖子。
答案 1 :(得分:0)
我认为你不希望raise在每个创作中都有例外。
创建的标准模式是:
def create
@movie = Movie.new(movie_params)
if @movie.save
redirect_to @movie
else
render 'new'
end
end
当电影属于current_user时:
def create
@movie = current_user.movies.new(movie_params)
if @movie.save
redirect_to @movie
else
render 'new'
end
end