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

我认为您应该为此使用范围:

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 回答
1

当你这样做时ProgramSchedule.all,你会得到一个Array,而不是ProgramSchedule.

如果您的方法将始终与所有记录一起调用,您可以使用这样的类方法:

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 回答
0
  def getScheduleFixed
    array = User.all.map(&:name)
    return array
  end
于 2012-10-30T11:18:55.600 回答