has_many из-за ошибки ассоциации при связывании пользователей и проектов - PullRequest
0 голосов
/ 20 декабря 2018

Я использовал has_many: посредством связи для отношений многих ко многим между двумя моделями, а именно, пользователем и проектом, но кажется, что в этом есть какая-то ошибка, так как запросы, которые хорошо работали в отношениях многих к одному,выкидывать ошибки.Может кто-нибудь проверить это, пожалуйста!Файл схемы выглядит следующим образом:

    ActiveRecord::Schema.define(version: 2018_12_19_170114) do

  create_table "project_users", force: :cascade do |t|
    t.integer "user_id"
    t.integer "project_id"
    t.index ["project_id"], name: "index_project_users_on_project_id"
    t.index ["user_id"], name: "index_project_users_on_user_id"
  end

  create_table "projects", force: :cascade do |t|
    t.text "content"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "picture"
    t.string "title"
    t.index ["user_id"], name: "index_projects_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.integer "enroll"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "password_digest"
    t.boolean "admin", default: false
    t.index ["email"], name: "index_users_on_email", unique: true
  end

end

Файл user.rb содержит код:

класс User

The project.rb file has the code:

    class Project < ApplicationRecord
      has_many :project_users
      has_many :users, :through => :project_users

Файл project_user.rb имеет код:

class ProjectUser < ApplicationRecord
    belongs_to :project, foreign_key: true
    belongs_to :user, foreign_key: true
end
class StaticPagesController < ApplicationController
  def home
    if logged_in?
      @project = current_user.projects.build
      @feed_items = current_user.feed.paginate(page: params[:page])
    end
  end

Ошибка выдается кодом:

<% if @user.projects.any? %>
    <h3>Projects (<%= @user.projects.count() %>)</h3>

Ошибка:

 SQLite3::SQLException: no such column: project_users.true: SELECT  1 AS one FROM "projects" INNER JOIN "project_users" ON "projects"."id" = "project_users"."true" WHERE "project_users"."user_id" = ? LIMIT ?

1 Ответ

0 голосов
/ 20 декабря 2018

Это ужасный сформулированный вопрос, так как в комментариях предлагалось, пожалуйста, включайте сообщения об ошибках, иначе отладка невозможна.

С первого взгляда я вижу следующие проблемы в вашей схеме:

  1. Таблицы имеют названия во множественном числе, например, project_users
  2. Внешние ключи находятся вформа единственного числа, например user_id
  3. Используйте помощник t.references :user вместо t.integer :user_id.Затем вы можете передать опции index: true, foreign_key: true для установки индексов и внешних ключей.
...