我正在尝试将我使用Devise创建的用户与帖子相关联。但每当我尝试创建以用户身份登录的帖子时,我都会收到标题中提到的错误。非常感谢你:))
class PostsController < ApplicationController
def index
@posts = Post.all
end
def new
@post = Post.new
end
def create
@post = Post.new(params.require(:post).permit(:task))
@post.user = current_user
if @post.save
redirect_to @post, alert:"Post created successfully."
else
redirect_to new_post_path, alert: "Error creating post."
end
end
def show
@post = Post.find(params[:id])
end
end
用户模型
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :posts
end
发布模型
class Post < ActiveRecord::Base
validates_presence_of :task
belongs_to :user
end
答案 0 :(得分:2)
您的数据库中的帖子表上可能没有user_id
列。
答案 1 :(得分:2)
添加用户ID以固定以下为我工作
rails g migration add_user_to_pin user_id:integer
答案 2 :(得分:1)
实际上,当你想要添加一个与你想要创建迁移的关联相对应的索引时,在这种情况下:
rails g migration AddUserIdToPin user:references
Rails将立即知道您希望使用用户ID唯一的主密钥在第二个表中包含索引。
希望这有帮助!
答案 3 :(得分:0)
在您的创建操作中,尝试以下操作:
def create
@post = Post.new(params.require(:post).permit(:task))
@post.user_id = current_user.id
if @post.save
redirect_to @post, alert:"Post created successfully."
else
redirect_to new_post_path, alert: "Error creating post."
end
end
并确保在Posts数据库表中有一个名为 user_id 的整数字段
答案 4 :(得分:0)
我刚刚做了同样的事情。我的工作方式对我而言。
我的帖子表中有一个user_id列。我在rails console(rails c)
中进行了验证Post.column_names
返回了所有字段,其中包含user_id。
在我的Post模型中,它是belongs_to:user,在我的用户模型中,它has_many:posts。
在我的PostsController中,我和你的不同。
我有
@post = Post.new(post_params)
@post.user_id = current_user.id
这似乎工作得很好。这也是在我为用户实现Devise之后编写的
答案 5 :(得分:0)
调查 schema.rb ,在帖子表下你能看到吗? user_id 列。如果没有 user_id ,您需要使用以下命令添加迁移列以添加 user_id :
rails generate migration add_user_id_to_posts user_id: integer
使用此命令将创建迁移文件名 20171220171727_add_user_id_to_posts.rb 。对你来说,时间戳20141220171727会有所不同。在迁移文件中,您将看到以下代码:
class AddUserIdToPosts < ActiveRecord::Migration
def change
add_column :posts, 'user_id', :integer
end
end
如果您的迁移如上所示,请运行:
rake db:migrate
应用迁移。立即重启服务器,看看你的代码是否有效。