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>

ビューに同じ各ブロックを配置すると、期待どおりに機能します(各ブロック内の「ゴール」でメソッドを呼び出すことができます)

4

2 に答える 2

1

それは何かをします-self.goals正しい動作である配列を返します。あなたがやりたかったのは、mapの代わりに使用することですeach

于 2013-08-28T08:58:19.497 に答える
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
于 2013-08-28T08:59:06.933 に答える