未知属性`user_id'

时间:2014-07-12 23:49:19

标签: ruby-on-rails devise

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

6 个答案:

答案 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 

应用迁移。立即重启服务器,看看你的代码是否有效。