2014-07-12 5 views
3

J'essaie d'associer mes utilisateurs que j'ai créés avec Devise aux messages. Mais je reçois l'erreur mentionnée dans le titre chaque fois que j'essaie de créer un message connecté en tant qu'utilisateur. Merci beaucoup :)attribut inconnu `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 

Le modèle utilisateur

class User < ActiveRecord::Base 

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

    has_many :posts 
end 

modèle post

class Post < ActiveRecord::Base 

validates_presence_of :task 
belongs_to :user 

end 

Répondre

2

Vous n'avez probablement pas une colonne user_id sur votre table messages dans votre base de données.

0

Dans votre créer une action, essayez quelque chose comme:

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 

et assurez-vous dans votre base de données les messages que vous avez un champ entier appelé user_id

0

Je viens de faire cette même chose. La mienne fonctionne de cette façon pour moi.

J'ai une colonne user_id dans ma table posts. Je vérifiais en faisant cela dans la console de rails (rails c)

Post.column_names 

qui sont retournés tous les champs et user_id était parmi eux.

dans mon modèle Post il appartient à: utilisateur, et dans mon modèle d'utilisateur il has_many: messages.

Dans mon PostsController cependant, le mien diffère du vôtre.

J'ai

@post = Post.new(post_params) 
@post.user_id = current_user.id 

Ce qui semble fonctionner très bien. Cela a également été écrit après avoir mis en œuvre pour l'utilisateur Devise

2

Pour ajouter l'ID utilisateur à la broche qui suit travaillé pour moi

rails g migration add_user_to_pin user_id:integer
0

Regardez dans vous schema.rb et sous tableau après pouvez-vous vu la colonne id_utilisateur. S'il n'y a pas user_id vous devez ajouter une colonne de migration pour ajouter user_id en utilisant la commande suivante:

rails generate migration add_user_id_to_posts user_id: integer 

En utilisant cette commande un nom de fichier de migration 20171220171727_add_user_id_to_posts.rb seront créés. Pour vous, l'horodatage 20141220171727 sera différent. Dans le fichier de migration, vous voir que vous avez le code suivant:

class AddUserIdToPosts < ActiveRecord::Migration 
    def change 
    add_column :posts, 'user_id', :integer 
    end 
end 

Si votre migration ressemble au-dessus courent alors:

rake db:migrate 

pour appliquer la migration.Redémarrez le serveur maintenant et voir si votre code fonctionne ou non.

1

En fait, lorsque vous voulez ajouter un index qui correspond à une association que vous havo pour créer une migration à l'aide, dans ce cas:

rails g migration AddUserIdToPin user:references 

Rails immédiatement savoir que vous souhaitez inclure un index sur la deuxième table en utilisant l'identifiant utilisateur unique, primaire, clé.

Espérons que cela aide !.

Questions connexes