2016-08-05 12 views
0

Ich laufe in den folgenden Fehler beim Ausführen meiner Tests. Die Bedingung für den Test besteht darin, dass der Benutzer angemeldet sein muss, um Posts zu erstellen. ähnliche Fehler scheinen hauptsächlich mit foreign_key zu funktionieren, aber ich habe es anscheinend. Jede Hilfe wird sehr geschätzt. Vielen Dank!ActiveRecord :: UnknownAttributeError: Unbekanntes Attribut 'user_id' für Beitrag

Failure/Error: @post = current_user.posts.build(post_params) 

ActiveRecord::UnknownAttributeError: 
    unknown attribute 'user_id' for Post. 

NoMethodError: 
# undefined method `user_id=' for #<Post:0x007fe1d0bf19e0> 
# Did you mean? user= 
# ./app/controllers/posts_controller.rb:10:in `create' 

post.rb

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

user.rb

class User < ActiveRecord::Base 
    has_many :posts, dependent: :destroy 
end 

posts_controller.rb

def create 
    @post = current_user.posts.new(post_params) 
    ... 
end 

schema.rb

create_table "posts", force: :cascade do |t| 
    t.string "title" 
    t.text  "body" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "user_id" 
end 

add_index "posts", ["user_id"], name: "index_posts_on_user_id" 

rspec Test

require "rails_helper" 

RSpec.describe "Creating post" do 
    let(:user) { User.create(username: "user", email: "[email protected]", 
    password: "password", password_confirmation: "password")} 

    scenario "successfully" do 
    sign_in user 
    visit root_path 
    click_on "New Post" 

    fill_in "Title", with: "title" 
    fill_in "Body", with: "body" 
    click_on "Submit" 

    within (".content") do 
     expect(page).to have_content("title") 
     expect(page).to have_content("user") 
    end 
    end 

    scenario "unsuccessfully" do 
    sign_in user 
    visit root_path 
    click_on "New Post" 

    fill_in "Title", with: "Second Post" 
    fill_in "Body", with: "" 
    click_on "Submit" 

    expect(page).to have_css ".error" 
    end 

    scenario "User not logged in cannot create posts" do 
    visit root_path 
    click_on "New Post" 

    expect(current_path).to eq(new_user_session_path) 
    end 
end 
+1

Klingt wie Ihre Test-Datenbank ist nicht synchron, versuchen zu löschen und neu zu erstellen –

+0

danke Mann, der geholfen – user5971196

+0

Ok - Ich habe es als Antwort hinzugefügt, so dass Sie die Frage als beantwortet markieren können –

Antwort

0

Ihre Testdatenbank nicht synchron ist, löschen und neu erstellen.

Verwandte Themen