Rails 安装 devise 后没有方法错误?
Rails no method error since installing devise?
我不确定它是否相关,但自从我添加了设计后,我收到了一个无方法错误,内容如下。 nil:NilClass 的未定义方法“帖子”
这是专门针对下面这行代码。
@post = current_user.posts.build
我被困在这里,因为我已经检查了所有明显的,除非我删除代码,所以它显示
@post = Post.new
否则我无法添加新帖子。我在下面添加了完整的代码。
Post控制器
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
Post 型号`
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
new html haml
%h1 New Post
= render 'form'
代码看起来不错...
但是如果没有用户登录会怎样?
尝试添加
before_action :authenticate_user!
或询问
user_signed_in?
在您尝试访问登录用户之前。
需要查看您是如何集成设备的。但是,是的,也许你没有登录这就是 nil
错误的原因。
我不确定它是否相关,但自从我添加了设计后,我收到了一个无方法错误,内容如下。 nil:NilClass 的未定义方法“帖子” 这是专门针对下面这行代码。
@post = current_user.posts.build
我被困在这里,因为我已经检查了所有明显的,除非我删除代码,所以它显示
@post = Post.new
否则我无法添加新帖子。我在下面添加了完整的代码。 Post控制器
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
Post 型号`
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
new html haml
%h1 New Post
= render 'form'
代码看起来不错...
但是如果没有用户登录会怎样? 尝试添加
before_action :authenticate_user!
或询问
user_signed_in?
在您尝试访问登录用户之前。
需要查看您是如何集成设备的。但是,是的,也许你没有登录这就是 nil
错误的原因。