Почему рельсы связывают 2 проекта на пользователя? - PullRequest
0 голосов
/ 28 июня 2019

Когда заявка пользователя принята, проект, которому принадлежит заявка, должен быть добавлен пользователю с помощью функции def finish. Однако, когда я запускаю User.first.projects на своей консоли, он показывает все проекты, которые пользователь завершил, но дважды.

Например, если заявка пользователя на проект 1 принята, User.first.projects дважды показывает проект 1,

Контроллер подачи:

def accept
  @submission = Submission.find(params[:id])
  @submission.update_attribute(:accepted, true)
  @submission.user.finish(@submission.project)
  redirect_to current_instructor
end

Модель проекта:

has_and_belongs_to_many :users

Модель пользователя:

has_and_belongs_to_many :projects

def finish(project)
  projects << project
end

def finished?(project)
  projects.include?(project)
end

Projectsubmissions / show.html.erb:

<% if instructor_signed_in? && @submission.accepted != true%>
  <%= link_to("Accept", project_accept_path(@submission.project.course, @submission.project, @submission), :method => :post %>
  <%= link_to("Reject", project_reject_path(@submission.project.course, @submission.project, @submission), :method => :post %>
<% end %>

Маршруты:

match 'courses/:course_id/projects/:project_id/submissions/:id/accept', :to => 'submissions#accept', :as => 'project_accept', :via => :post
match 'courses/:course_id/projects/:project_id/submissions/:id/reject', :to => 'submissions#reject', :as => 'project_reject', :via => :post

Модель представления:

belongs_to :user
belongs_to :project

Журналы консоли:

irb(main):001:0> User.first.projects
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
  Project Load (0.3ms)  SELECT  "projects".* FROM "projects" INNER JOIN     "projects_users" ON "projects"."id" = "projects_users"."project_id" WHERE     "projects_users"."user_id" = ? ORDER BY "projects"."created_at" DESC LIMIT     ?  [["user_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Project id: 1, name: "Project 1", description: "Description", course_id: 1, created_at: "2019-06-28 17:33:46", updated_at: "2019-06-28 17:33:46">, #<Project id: 1, name: "Project 1", description: "Description", course_id: 1, created_at: " 2019-06-28 17:33:46", updated_at: "2019-06-28 17:33:46">]>
irb(main):002:0>

Пользователи и проекты присоединяются к миграции:

def change
  create_join_table :projects, :users do |t|
    t.index [:project_id, :user_id]
  end
end

Edit:

У меня странная проблема. Я попробовал это на Safari, и он отлично работал, но при попытке на Chrome User.first.projects по-прежнему возвращает 2 одинаковых проекта.

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