如何在Ruby on Rails中获取由start_date和end_date分组的对象

时间:2016-09-11 08:26:55

标签: ruby-on-rails ruby rails-activerecord

我是Rails的新手。 非常感谢您查看我的问题。

我想要做的是提取按start_date和end_date排序和分组的数据。

型号:

class CreateUserMedicines < ActiveRecord::Migration
def change
  create_table :user_medicines do |t|
    t.references :user, index: true, foreign_key: true, null: false
    t.references :medicine, index: true, foreign_key: true, null: false
    t.date :course_start, null: false
    t.date :course_end, null: false
  end
  add_index :user_medicines, [:user_id, :medicine_id]
  end
end

预期视图,因为每个用户都是这样的。

+---+------------+-------------+------------+
|   | start_date |  end_date   |  Medicines |
+---+------------+-------------+------------+
| 1 | 2016/09/11 | 2016/10/01  |  A, B, C   |
| 2 | 2016/09/11 | 2016/09/18  |  D, E      |
| 3 | 2016/09/19 | 2016/09/26  |  F         |
+---+------------+-------------+------------+

作为每种药(A,B,C),我想获得药品名称和ID以添加链接。

为此,我如何编写控制器和模型功能?

[编辑:] 我想要的结果:

{ [ Sun, 11 Sep 2016, Sun, 17 Sep 2016 ]=> [#<UserMedicine:0x007f82c291722>, #<UserMedicine:0x007f82c291349>]

当前代码和结果:

record:
@user.user_medicines.group_by(&:course_start)

result:
{ [ Sun, 11 Sep 2016 ]=> [#<UserMedicine:0x007f82c291722>, #<UserMedicine:0x007f82c291349>] 

任何答案都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您希望将块传递给group_by并从块中返回一个数组

@user.user_medicines.group_by { |m| [m.course_start, m.course_end] }