Я пытаюсь сделать некоторые передовые отношения в своих моделях RoR.Отношения в Ruby on Rails через 4 модели
Да, у меня есть проекты и задачи. Проекты имеют задачи, а у пользователей есть проекты.
Теперь я хочу, чтобы пользователь, который «подписался» на проект, теперь может «зарегистрироваться» к задачам внутри этого проекта.
Мои текущие классы вкратце:
class AdminUser < ActiveRecord::Base
has_and_belongs_to_many :projects
has_and_belongs_to_many :tasks
has_many :admin_users_projects
[...]
class AdminUsersProject < ActiveRecord::Base
belongs_to :admin_user
has_and_belongs_to_many :project
has_many :tasks
[...]
class Project < ActiveRecord::Base
has_many :tasks
has_and_belongs_to_many :admin_users
has_and_belongs_to_many :admin_users_projects
[...]
class Task < ActiveRecord::Base
belongs_to :project
has_and_belongs_to_many :admin_users
belongs_to :admin_users_project
[...]
Зонирование выглядит следующим образом:
create_table "admin_users", :force => true do |t|
t.string "first_name", :limit => 25
t.string "last_name", :limit => 50
t.string "email", :limit => 100, :default => "", :null => false
t.string "hashed_password", :limit => 40
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "username", :limit => 25
t.string "salt", :limit => 40
end
add_index "admin_users", ["username"], :name => "index_admin_users_on_username"
create_table "admin_users_projects", :force => true do |t|
t.integer "admin_user_id"
t.integer "project_id"
end
add_index "admin_users_projects", ["admin_user_id", "project_id"], :name => "index_admin_users_projects_on_admin_user_id_and_project_id"
create_table "projects", :force => true do |t|
t.string "name"
t.integer "position"
t.boolean "visible", :default => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "tasks", :force => true do |t|
t.integer "project_id"
t.string "permalink"
t.integer "position"
t.boolean "visible"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "name"
t.integer "admin_user_id"
t.integer "progress"
end
add_index "tasks", ["permalink"], :name => "index_tasks_on_permalink"
add_index "tasks", ["project_id"], :name => "index_tasks_on_project_id"
end
У меня есть мнение, что показывают проекты, а затем просматривать их подмножества задач У меня также есть который показывает проекты пользователей, но теперь я хочу, чтобы он показывал, что пользователи подмножества задач.
Мой взгляд на 'admin_user_projects' вкратце заключается в следующем:
<% @admin_users_projects.each do |admin_users_projects| %>
<tr>
<td><%= admin_users_projects.admin_user_id %></td>
<td><%= admin_users_projects.admin_user.username %></td>
<td><%= admin_users_projects.project_id %></td>
<td><%= admin_users_projects.project.name %></td>
</tr>
<% end %>
Это показывает имя пользователей ID, имя пользователя, идентификатор проекта и проекта. Теперь я хочу добавить строку, показывающую, сколько задач пользователь «зарегистрировал» для этого проекта. Я попытался
<td><%= admin_users_projects.tasks.size %></td>
Но получить следующее:
Mysql2::Error: Unknown column 'tasks.admin_users_project_id' in 'where clause': SELECT COUNT(*) FROM `tasks` WHERE `tasks`.`admin_users_project_id` = 1
Кто-нибудь есть какие-либо идеи, как получить эти отношения работают эффективно?
Проекты имеют задачи, пользователи имеют проекты и пользователи имеют задачи.Я пытаюсь создать отношения между ними, чтобы передать проекты пользователей и их задачи для этих проектов. – user1900791
Да, но когда вы просите о задачах админ-пользовательских проектов, какие задачи вы просите? Разъяснение, которое поможет вам написать ваш запрос. –
Иными словами, для задач проектов получить объект проекта, и они будут project.tasks. Для пользователей, получить объект пользователя, и их задачи будут user.tasks. Достаточно просто, если это не совсем то, что вы хотите, и в этом случае вам нужно переопределить то, что вы хотите. –