Когда заявка пользователя принята, проект, которому принадлежит заявка, должен быть добавлен пользователю с помощью функции 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 одинаковых проекта.