未定义的方法`id'为#

时间:2014-07-16 13:49:18

标签: ruby-on-rails ruby calendar

基本上我试图设置Trainer注册的日历,如下所示:

@calendar = Calendar.where("current = 1")
@trainer.calendar = @calendar.id

这给了我以下错误:

undefined method `id' for #<Calendar::ActiveRecord_Relation:0x0000000371d128>

为什么会这样?

3 个答案:

答案 0 :(得分:2)

以下内容可行:

@calendar = Calendar.where(current: 1)
@trainer.calendar = @calendar.first

Calendar.where("current = 1")提供了ActiveRecord::Relation::ActiveRecord_Relation_Calendar个对象。您需要从Calendar对象中获取ActiveRecord::Relation对象,然后您可以调用方法#id

查看代码,您似乎想要分配Calendar对象,因此请勿调用#id方法。

答案 1 :(得分:1)

使用where,您可以获取一组Calendar条记录(AR条件,它是ActiveRecord::Relation),这些记录符合给定条件而非单条记录。如果您想使用Calendar找到单一的current = 1记录,则可以使用:

@calendar = Calendar.find_by_current!(1)
@trainer.calendar = @calendar

答案 2 :(得分:0)

您可以调用ActiveRecord_Relation的方法.values来获取实际数据。

@calendar = Calendar.where(current: 1).values

为了更好地了解您,您可以查看documentation