создание с ассоциацией принадлежат к принадлежащему человеку - PullRequest
0 голосов
/ 14 декабря 2011

Я получаю ошибку unknown attribute: user_id во время выполнения @user.posts.create в моих спецификациях

Класс пользователя

class User < ActiveRecord::Base
  # new columns need to be added here to be writable through mass assignment
  attr_accessible :username, :email, :password, :password_confirmation

  has_many :posts, :dependent => :destroy
end

Почтовый класс

class Post < ActiveRecord::Base
  attr_accessible :title, :body

  belongs_to :user
end

Схема БД

ActiveRecord::Schema.define(:version => 20111214045425) do

  create_table "posts", :force => true do |t|
    t.string   "title"
    t.string   "body"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "users", :force => true do |t|
    t.string   "username"
    t.string   "email"
    t.string   "password_hash"
    t.string   "password_salt"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

Любая помощь? Я следовал всем инструкциям по использованию ActiveRecord. Все, что я хочу сделать, это создать сообщение с ассоциированным пользователем.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Обнаружена проблема после сброса схемы test.sqlite3. user_id не был определен как столбец в БД. Сброс базы данных и запуск rake spec переносит базу данных и исправляет все.

0 голосов
/ 14 декабря 2011

Вы можете использовать

@user = User.find(1)
@post = @user.posts.build(posts_attributes_as_hash)
@post.save 

Или даже

post = Post.new(posts_attributes)
@user = User.find(1)
@user.posts << post

Редактировать

Чтобы использовать создать напрямую:

@user = User.find(1)
@post = @user.posts.create(posts_attributes_as_hash)

Для получения дополнительной информации посмотрите has_many-association-reference особенно в разделе под названием 4.3.1 Methods Added by has_many

Новое редактирование:

Я создал новый проект с вашим кодом и в консоли rails попробовал следующие команды

User.create(:username => "UserNamedTest", :email => "usernamedtest@somewhere.com")

SQL (13.6ms)  INSERT INTO "users" ("created_at", "email", "password_hash", "password_salt", "updated_at", "username") VALUES (?, ?, ?, ?, ?, ?)  [["created_at", Wed, 14 Dec 2011 09:02:46 UTC +00:00], ["email", "usernamedtest@somewhere.com"], ["password_hash", nil], ["password_salt", nil], ["updated_at", Wed, 14 Dec 2011 01:03:26 UTC +00:00], ["username", "UserNamedTest"]]

=> #<User id: 2, username: "UserNamedTest", email: "usernamedtest@somewhere.com", password_hash: nil, password_salt: nil, created_at: "2011-12-14 09:02:46", updated_at: "2011-12-14 09:02:46">

user =  User.find_by_username("UserNamedTest")

User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."username" = 'UserNamedTest' LIMIT 1

=> #<User id: 2, username: "UserNamedTest", email: "usernamedtest@somewhere.com", password_hash: nil, password_salt: nil, created_at: "2011-12-14 09:02:46", updated_at: "2011-12-14 09:02:46">

new_post = user.posts.create(:title => "just a test", :body =>"body of article test")

SQL (0.5ms)  INSERT INTO "posts" ("body", "created_at", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?)  [["body", "body of article test"], ["created_at", Wed, 14 Dec 2011 09:03:59 UTC +00:00], ["title", "just a test"], ["updated_at", Wed, 14 Dec 2011 09:03:59 UTC +00:00], ["user_id", 2]]

=> #<Post id: 2, title: "just a test", body: "body of article test", user_id: 2, created_at: "2011-12-14 09:03:59", updated_at: "2011-12-14 09:03:59">

irb(main):022:0> new_post.inspect
=> "#<Post id: 2, title: \"just a test\", body: \"body of article test\", user_id: 2, created_at: \"2011-12-14 09:03:59\", updated_at: \"2011-12-14 09:03:59\">"

Из того, что я вижу, код в порядке, пост создается без ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...