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
Klingt wie Ihre Test-Datenbank ist nicht synchron, versuchen zu löschen und neu zu erstellen –
danke Mann, der geholfen – user5971196
Ok - Ich habe es als Antwort hinzugefügt, so dass Sie die Frage als beantwortet markieren können –