安装设备后Rails没有方法错误?

时间:2015-01-19 13:17:06

标签: ruby-on-rails ruby devise

我不确定它是否相关但是因为我添加了设计我得到一个无方法错误,如下所示。未定义的方法`posts'为nil:NilClass 这具体针对以下代码行。

@post = current_user.posts.build

我宁愿被困在这里,因为我检查了所有明显的,除非我删除代码所以它读取

@post = Post.new

我无法添加新帖子。我在下面添加了完整的代码。 帖子控制器

class PostsController < ApplicationController
before_action :find_post, only: [:show, :edit, :update, :destroy]

def index
    @posts = Post.all.order("created_at DESC")
end

def show
end

def new
    @post = current_user.posts.build
end

def create
    @post = current_user.posts.build(post_params)

    if @post.save
        redirect_to @post
    else
        render 'new'
    end
end

def edit
end

def update
    if @post.update(post_params)
        redirect_to @post
    else
        render 'edit'
    end
end

def destroy
    @post.destroy
    redirect_to root_path
end

private

def find_post
    @post = Post.find(params[:id])
end

def post_params
    params.require(:post).permit(:title, :content)
end
end

发布模型

 class Post < ActiveRecord::Base
    belongs_to :user
 end

用户模型

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :posts
end

新的HTML haml

%h1 New Post

= render 'form'

2 个答案:

答案 0 :(得分:4)

代码看起来不错......

但是如果没有用户登录会发生什么? 尝试添加

before_action :authenticate_user!

或询问

user_signed_in?

在您尝试访问登录用户之前。

答案 1 :(得分:0)

需要了解您如何集成设备。但是,也许你没有签署nil错误的原因。