0

Active Record IstanceでgetScheduleFixed()メソッドを使用したい

ps = ProgramSchedule.all
ps.getScheduleFixed

重要な事実は、メソッド宣言で「ps」配列(アクティブレコード)にアクセスする方法です。

class ProgramSchedule < ActiveRecord::Base

  def getScheduleFixed

    array = (HERE ARRAY RETURNED BY ACTIVE RECORD)

    # some stuff...

    return array

  end
end
4

4 に答える 4

1

を実行すると、のインスタンスではなく、ProgramSchedule.allを取得します。ArrayProgramSchedule

メソッドが常にすべてのレコードで呼び出される場合は、次のようなクラスメソッドを使用できます。

class ProgramSchedule < ActiveRecord::Base
  def self.getAllScheduleFixed
    array = ProgramSchedule.all # or self.class.all could be used if you subclass this class
    #some stuff
  end
end

ProgramScheduleのサブセット、つまり条件のみを操作する必要がある場合は、このクラスメソッドに条件を渡すか、結果の配列をクラスメソッドに直接渡す必要があります。

于 2012-10-30T11:23:45.580 に答える
1

あなたはここで物事を混ぜ合わせています。

1)単一のActiveRecordオブジェクトで使用できる(インスタンス)メソッドがあります。

# Returns an ARRAY with all programschedule instances
all_ps = ProgramSchedule.all

# You can now iterate over over the array
all_ps.each do |ps|
  # in here you can call the instance method on the actual model instance
  ps.instance_method
end

# Definition of this method in app/models/program_schedule.rb
class ProgramSchedule < ActiveRecord::Base
  def instance_method
    # Foo
  end
end

2) ActiveRecordモデル自体で実行できるクラスメソッドがあります。

ProgramSchedule.class_method

# Definition of this method in app/models/program_schedule.rb
class ProgramSchedule < ActiveRecord::Base
  def self.class_method
    # Bar
  end
end
于 2012-10-30T11:28:04.377 に答える
1

これにはスコープを使用する必要があると思います。

class ProgramSchedule < ActiveRecord::Base

  scope :fixed, { all.map(&:getScheduleFixed) }

end

また

class ProgramSchedule < ActiveRecord::Base

  def self.fixed
    all.map(&:getScheduleFixed)
  end

end

今、あなたはただ呼び出す必要がありますProgramSchedule.fixed。これらのメソッドは両方とも、などの他のスコープにチェーンできますProgramSchedule.latest.fixed。詳細はこちらをご覧ください

于 2012-10-30T11:57:25.857 に答える
0
  def getScheduleFixed
    array = User.all.map(&:name)
    return array
  end
于 2012-10-30T11:18:55.600 に答える