我正在开发一个rails应用程序,用户可以将自己想要执行的任务添加到自己的自定义列表中。每个任务也可以属于0个或更多类别。到目前为止,我已经尝试过这个:
user.rb
Public Sub RoundedRectangle1_Click()
Dim resource As Range
Dim register As Range
Dim cancel As Range
Set resource = Worksheets("Resource List1").Cells(2, 4)
Set register = Worksheets("Registered List").Cells(2, 1)
Set cancel = Worksheets("Cancelled List").Cells(2, 1)
Call findRegister(resource, register)
End Sub
Public Sub findRegister(ByRef resource As Range, ByRef register As Range)
Dim i As Integer
i = 0
Do While resource.Offset(i, 3) <> ""
If resource.Offset(i, 3).Value = register.Range("A2").Value Then
resource.Offset(i, 3).Cells.Interior.ColorIndex = 37
End If
i = i + 1
Loop
End Sub
user_list.rb
has_one :user_list
has_many :tasks, through: :user_list
tasks.rb
belongs_to :user
has_many :tasks
[时间戳} _migration.rb
has_and_belongs_to_many :categories
我遇到的问题是在控制台中我尝试运行create_table :user_lists do |t|
t.integer :user_id
t.integer :task_id
t.timestamps null: false
end
,在使用以下查询时无法找到列User.find(1).tasks
:
tasks.user_list_id
此查询应该使用user_lists表上的tasks id加入tasks表中的tasks id。协会是否正确,如果是,我该怎么做才能更改查询?
答案 0 :(得分:3)
要允许将任务放在许多列表上,您需要一个连接user_lists
和tasks
表的M2M连接表。
class User < ActiveRecord::Base
has_many :user_lists
has_many :tasks, through: :user_lists
end
class Task < ActiveRecord::Base
has_many :user_list_items
has_many :user_lists, through: :user_list_items
end
class UserListItem < ActiveRecord::Base
belongs_to :task
belongs_to :user_list
has_one :user, through: :user_list
# optional
validates_uniqueness_of :task_id, scope: :user_list_id
end
class UserList < ActiveRecord::Base
belongs_to :user
has_many :user_list_items
has_many :tasks, through: :user_list_items
end
您可以使用以下命令创建连接模型和迁移:
rails g model UserListItem user_list:belongs_to task:belongs_to
您可能还想打开迁移并添加复合索引:
add_index :user_list_items, [:user_list_id, :task_id], unique: true
将其设置为唯一是可选的 - 但在大多数情况下,您希望连接表条目对于表A和B是唯一的。
请参阅:
答案 1 :(得分:0)
您的用例要求将任务分配给多个用户,并且用户只有一个任务列表。这听起来像是users
和tasks
之间的HABM关联。
最简单的表达方式是:
class User
has_and_belongs_to_many: :tasks
...
end
class Task
has_and_belongs_to_many: :users
...
end
以及用于创建连接表的迁移:
create_join_table :users, :tasks, do |t|
t.index :user_id
t.index.task_id
end
在您需要跟踪其他属性之前,您不需要创建TaskUser
模型来匹配连接表。 Rails会自动处理这个问题。
如果用户需要多个任务列表,则您需要该TaskList模型。让我知道,我会更新我的答案。
的文档