2012-10-30 22 views
0

我想在活動記錄Istance如何添加活動記錄的方法?

ps = ProgramSchedule.all 
ps.getScheduleFixed 

使用我的方法getScheduleFixed()一個重要的事實是如何獲得「PS」陣列(活動記錄)我的方法聲明

class ProgramSchedule < ActiveRecord::Base 

    def getScheduleFixed 

    array = (HERE ARRAY RETURNED BY ACTIVE RECORD) 

    # some stuff... 

    return array 

    end 
end 
+1

'.all'返回一個數組,而不是ActiveRecord實例。你可以做'ProgramSchedule.getScheduleFixed'嗎? – Dogbert

回答

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 
0
def getScheduleFixed 
    array = User.all.map(&:name) 
    return array 
    end 
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的子集來工作,這是條件,您需要將條件傳遞給此類方法,或者直接將結果數組傳遞給某個類方法。

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。查看更多詳情here