2013-08-28 3 views
0

Я, имеющие реальную борьбу с этим:Невозможно вызвать методы ребенка в модели метод

В student.rb:

def subject_avg 
    self.goals.each do |goal| 
     goal.subject_id 
    end 
    end 

Это не «делать» что-нибудь - или я должен сказать он ничего другого не делать из

def subject_avg 
    self.goals.each do |goal| 
     goal.id 
    end 
    end 

или

def subject_avg 
    self.goals.each do |goal| 
     goal.goal 
    end 
    end 

независимо от того, что она возвращает массив целей, которые принадлежат к этой теме:

[ 
    #<Goal id: 28, goal: "Do it on command", subject_id: 10, created_at: "2013-08-25 10:59:35", updated_at: "2013-08-25 10:59:35", default: nil>, 
    #<Goal id: 29, goal: "Make it chunky", subject_id: 10, created_at: "2013-08-25 10:59:35", updated_at: "2013-08-25 10:59:35", default: nil>, 
    #<Goal id: 30, goal: "Hit the mark", subject_id: 10, created_at: "2013-08-25 10:59:35", updated_at: "2013-08-25 10:59:35", default: nil>, 
    #<Goal id: 31, goal: "Puke and rally", subject_id: 10, created_at: "2013-08-25 10:59:35", updated_at: "2013-08-25 10:59:35", default: nil> 
] 

сначала я думал, что это просто не читал/не мог прочитать каждый блок по какой-то причине так просто проходил результат self.goals.each (хотя, похоже, это то, что происходит). Однако, если я называю несуществующий метод, он выдает ошибку:

def subject_avg 
    self.goals.each do |goal| 
     goal.FFS_do_something! 
    end 
    end 

возвращается

undefined method `FFS_do_something!' for #<Goal:0x000001064329f0> 

если я ставлю то же каждый блок в представлении, это работает, как ожидалось (я могу позвонить методы по «цели» в каждом блоке)

ответ

1

Я думаю, что вам нужно map вместо each

def subject_avg 
    self.goals.map do |goal| 
     goal.subject_id 
    end 
    end 

или

def subject_avg 
    self.goals.map(&:subject_id) 
    end 
1

Он что-то делает - он возвращает массив self.goals, который является правильным поведением. Что вы хотели сделать, так это использовать map вместо each.

Смежные вопросы