2014-07-12 84 views
3

我試圖將我創建的用戶與Devise關聯到帖子。但是,當我嘗試創建以用戶身份登錄的帖子時,我得到了標題中提到的錯誤。非常感謝你:)未知屬性`user_id'

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 Post < ActiveRecord::Base 

validates_presence_of :task 
belongs_to :user 

end 

回答

2

你可能沒有你的帖子表user_id列在你的數據庫用戶模型

class User < ActiveRecord::Base 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :posts 
end 

Post模型。

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 

,並且確保在你的帖子的數據庫表,你有一個整數字段名爲USER_ID

0

我只是做了這同樣的東西。我的工作方式是這樣的。

我的帖子表中有一個user_id列。我通過在軌道控制檯(導軌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 

這似乎工作得很好。這也是我寫的制定實施後,爲用戶

2

爲了增加用戶ID引腳爲我下面的工作

rails g migration add_user_to_pin user_id:integer
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 

應用遷移。現在重新啓動服務器,看看你的代碼是否有效。

1

其實,當你想要添加對應於您HAVO創建使用遷移具有關聯關係的指標,在​​這種情況下:

rails g migration AddUserIdToPin user:references 

Rails會立即知道要包含索引到第二表使用用戶標識唯一,主鍵,鍵。

希望這有助於!