ruby-on-rails - Rails 3. 如何从查询结果中删除重复的关联记录?

标签 ruby-on-rails ruby activerecord

我有@invoices,其中包含与特定预定类(class)相关的所有发票。

scheduled_course has_many :invoices, through => :enrollments
invoices belongs_to :scheduled_courses

@scheduled_course = ScheduledCourse.find(params[:id])
@invoices = @scheduled_course.invoices

现在,一些发票可能会重复。例如,@invoices - @scheduled_course.invoices 可能输出...

=> [#<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2bcc9c,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">, 
#<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2b828c,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">, 
#<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2b7e54,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">, 
#<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2b7a1c,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">, 
#<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2b75e4,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">, #<Invoice id: 85, company_id: 106, invoice_number: "2870", issued_on: "2012-03-27", status: "pagado", notes: "", created_at: "2012-05-02 15:28:13", updated_at: "2012-05-02 15:50:50", exchange_rate: #<BigDecimal:c2b7198,'0.12E2',4(8)>, student_id: nil, due_date: "2012-04-02">

如何从结果中删除重复的对象?

最佳答案

您可以将 :uniq 选项传递给 has many:

has_many :invoices, :through => :enrollments, :uniq => true

这是 RoR 文档中对此选项的描述:

If true, duplicates will be omitted from the collection. Useful in conjunction with :through.

此外,为了避免重复项首先进入数据库,您可以使用唯一的数据库索引,它可能看起来像这样:

add_index :enrollments, [:invoice_id, :scheduled_course_id], :unique => true

关于ruby-on-rails - Rails 3. 如何从查询结果中删除重复的关联记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938114/

相关文章:

ruby-on-rails - 过滤中的查询字符串或绑定(bind)参数

Ruby - URL 编码

ruby-on-rails - 查看 Rails 迁移输出的方法

ruby-on-rails - yield to an anonymous block 两个函数

mysql - 更改Rails应用程序的MySQL表中的自增ID

ruby-on-rails - 我们可以编写没有哈希类的哈希吗?

python - Django 或 Ruby on Rails - 用户扩展、插件

ruby-on-rails - 如何每 x 秒执行一次方法调用?

ruby-on-rails - Rails 模型属性(property)位置

ruby-on-rails-3 - ActiveRecord + postgresql + 数据约束