将帖子链接到经过身份验证的用户 - 如何在控制器中使用current_user? (设计)

时间:2017-09-14 00:56:01

标签: ruby-on-rails ruby devise

我正在使用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

1 个答案:

答案 0 :(得分:0)

尝试从@current_author中删除@。使用devise,current_author是一个通过session [:user_id]而不是实例变量返回用户的方法。

另外,尝试做三件事之一......

  1. @author.articles.create(atricle_params)
    更改为
    @author.articles.new(atricle_params)

  2. 将作者的作业移至“&#39; new&#39;方法如此......

    def new
      @article = Article.new
      @article.author = current_user
    end
    
  3. 在表单中添加hidden_​​field ...

    '<%= f.hidden_field :author_id, current_user.id %>
    
    &#39;