我的模型中有以下类:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_one :list
end
和
class List < ActiveRecord::Base
belongs_to :user
end
现在我想在列表/显示页面上创建一个新列表按钮,我可以在其中为current_user创建一个新列表。
def new
@list = List.new
end
def create
@list = current_user.list.build(params.require(:list).permit(:title))
if @list.save
redirect_to @list, notice: "List was saved successfully."
else
flash[:error] = "Error creating list. Please try again."
render :new
end
end
但是我的创建功能出了问题。当我打开rails c并尝试:
时,我也有道理u = User.first => validated user
u = List.new
我得到的错误是列表不是你的方法(我的用户)。出了什么问题?
答案 0 :(得分:2)
您没有提供有关错误的信息,但我猜解释员抱怨在build
上调用nil
方法。这是因为你打电话:
@list = current_user.list.build(params.require(:list).permit(:title))
但current_user.list
会返回nil
。你应该改为:
@list = current_user.build_list(params.require(:list).permit(:title))
has_one
方法的文档