说明
在我的Rails 5应用程序中,
父模型order.rb
class Order < ApplicationRecord
has_many :tasks
end
儿童模型task.rb
class Task < ApplicationRecord
belongs_to :order
belongs_to :rider
end
rider.rb
class Rider < ApplicationRecord
has_many :tasks
end
父级和任务属性schema.rb
create_table "orders", force: :cascade do |t|
t.string "status"
t.boolean "urgent"
t.date "schedule"
t.integer "customer_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "company_id"
t.index ["company_id"], name: "index_orders_on_company_id", using: :btree
t.index ["customer_id"], name: "index_orders_on_customer_id", using: :btree
end
create_table "tasks", force: :cascade do |t|
t.boolean "task_type"
t.string "details"
t.string "address"
t.string "nearby"
t.float "lat"
t.float "lng"
t.string "name"
t.string "contact"
t.time "time"
t.string "item_type"
t.integer "order_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "rider_id"
t.integer "status"
t.index ["order_id"], name: "index_tasks_on_order_id", using: :btree
end
现在让我们假设,
orders
,每个order
有5个tasks
。tasks
的{{1}}中的1个属于此骑手orders
my_rider = Rider.find(1)
中有多少tasks
,如果order
分配了任何rider
,我们就会显示task
在@assigned_orders
信息中心上,应该有my_rider
分配了orders
的所有my_rider
,在我的情况下,这是{3}中的前2个task
问题
orders
@assigned_orders
。my_rider
发出一个查询,并将所有ActiveRecord
与orders
一起获取。我试过了,
tasks
但它为my_rider = Rider.find(1)
@assigned_orders = Task.joins(:order).where(rider: my_rider)
实例变量中的tasks
个对象提供了@assigned_orders
。
我无法使用Parent(orders
)模型进行查询,因为它与Order
模型没有任何关联。
请帮我找到解决此问题的方法。提前谢谢!
答案 0 :(得分:3)
就像ABC一样简单。添加has_many :through
关联,以设置riders
和orders
之间的关联。
class Rider < ApplicationRecord
has_many :tasks
has_many :orders, -> { distinct }, through: :tasks
end
然后使用它。
my_rider = Rider.find(1)
@assigned_orders = my_rider.orders
您也可以在没有关联的情况下进行此操作。
@assigned_orders = Order.joins(:tasks).where(tasks: {rider_id: my_rider.id}).distinct
答案 1 :(得分:1)
您的任务表中有rider_id
列。因此我猜您可以进行以下查询:
Order.joins(:tasks).where(tasks: { rider_id: my_rider.id }).distinct