Я пытаюсь создать простую внутреннюю службу обмена сообщениями, для которой я использовал устройство для аутентификации, поэтому у меня есть таблица пользователей. Я создал таблицу сообщений для сообщений и таблицу соединений, называемую messages_users. Я хочу использовать has_many через ассоциацию, так что мои ассоциации, как это: -ActiveRecord :: StatementInvalid: Mysql2 :: Ошибка: таблица не существует
user.rb: -
has_many :sent_messages, class_name: "Message", foreign_key: "user_id"
has_many :message_users
has_many :received_messages, through: :message_users, source: :message
message.rb: -
belongs_to :user
has_many :message_users
has_many :receivers, through: :message_users, source: :user
message_user.rb: -
class MessageUser < ActiveRecord::Base
belongs_to :user
belongs_to :message
end
и schema.rb: -
ActiveRecord::Schema.define(version: 20130912100741) do
create_table "messages", force: true do |t|
t.text "subject"
t.text "body", limit: 2147483647
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "messages_users", id: false, force: true do |t|
t.integer "user_id", null: false
t.integer "message_id", null: false
end
add_index "messages_users", ["message_id"], name: "index_messages_users_on_message_id", using: :btree
add_index "messages_users", ["user_id"], name: "index_messages_users_on_user_id", using: :btree
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.integer "failed_attempts", default: 0
t.string "unlock_token"
t.datetime "locked_at"
t.string "authentication_token"
t.datetime "created_at"
t.datetime "updated_at"
t.string "provider"
t.string "uid"
t.string "name"
end
add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree
add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
add_index "users", ["unlock_token"], name: "index_users_on_unlock_token", unique: true, using: :btree
end
Он отлично работает, когда я использую user_object.sent_messages, но когда я использую user_object.received_messages это дает мне mysql2 :: Ошибка: Таблица 'to_do.message_users' не существует: SHOW FULL FIELDS FROM message_users ActiveRecord: : StatementInvalid: Mysql2 :: Ошибка: таблица 'to_do.message_users' не существует ошибка. Я хочу использовать has_many только и не habtm. Здесь было несколько вопросов о stackoverflow, но никто из них не решил мою проблему, поэтому никаких предложений?
Вы пробовали переименовать стол, как я уже говорил в ответ? – derekyau