我正在使用Rails"入门"博客文章练习,并尝试与Devise集成进行身份验证和创作帖子。
创建文章时,作者应该是当前登录的用户。
尝试创建文章时出错。我知道错误在我的文章控制器中,但我似乎无法弄清楚如何获取当前登录的作者以启动文章的创建。我相信我在作者和文章之间做了正确的关系。
错误:未定义的方法`文章'为零:NilClass
作者模型:
class Author < ApplicationRecord
has_many :articles
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
文章模型:
class Article < ApplicationRecord
belongs_to :author
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
end
文章控制者:
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[: id])
end
def new
@article = Article.new
end
def edit
@article = Article.find(params[: id])
end
def create
@author = @current_author
@article = @author.articles.create(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
def update
@article = Article.find(params[: id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
def destroy
@article = Article.find(params[: id])
@article.destroy
redirect_to articles_path
end
private
def article_params
params.require(: article).permit(: title,: text,: author)
end
end
答案 0 :(得分:0)
尝试从@current_author中删除@。使用devise,current_author是一个通过session [:user_id]而不是实例变量返回用户的方法。
另外,尝试做三件事之一......
将
@author.articles.create(atricle_params)更改为
@author.articles.new(atricle_params)
将作者的作业移至“&#39; new&#39;方法如此......
def new @article = Article.new @article.author = current_user end
在表单中添加hidden_field ...
'<%= f.hidden_field :author_id, current_user.id %>&#39;