2013-04-03 30 views
5

Tôi có lỗiKhông xác định phương pháp lỗi khi tôi thêm phương pháp mô hình hóa trong Rails

phương pháp events_and_repeats không xác định cho #<Class:0x429c840>

app/controllers/events_controller.rb: 11: trong `index'

ứng dụng của tôi/mô hình/event.rb là

class Event < ActiveRecord::Base 
    belongs_to :user 

    validates :title, :presence => true, 
        :length => { :minimum => 5 } 
    validates :shedule, :presence => true 

    require 'ice_cube' 
    include IceCube 

    def events_and_repeats(date) 
    @events = self.where(shedule:date.beginning_of_month..date.end_of_month) 

    return @events 
    end 

end 

app/controllers/events_controller.rb

def index 
    @date = params[:month] ? Date.parse(params[:month]) : Date.today 
    @repeats = Event.events_and_repeats(@date) 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @events } 
    end 
    end 

Điều gì là sai?

+7

chỉ cần một 'tự' - bạn đã thực hiện một phương pháp dụ, nhưng gọi một phương thức lớp – Swards

+0

Tự ở đâu? Xin vui lòng cho tôi một ví dụ. Và sự khác biệt là gì? Cảm ơn – Gabi

+0

Kiểm tra phản hồi của Zippie, tôi nghĩ rằng tất cả đều được đề cập ở đó. – Swards

Trả lời

10

Giống như Swards nói, bạn gọi một phương pháp dụ trên một lớp. Đổi tên nó:

def self.events_and_repeats(date) 

Tôi chỉ writting này trong một câu trả lời vì nó quá dài cho một lời nhận xét, kiểm tra trang băng-cube github, nó nghiêm chỉnh nói:

Include IceCube inside and at the top of your ActiveRecord model file to use the IceCube classes easily. 

Ngoài ra tôi nghĩ rằng nó bạn không cần số require trong mô hình của mình.

+0

Cảm ơn rất nhiều !! Có thể bạn có thể giúp tôi giải quyết thêm một vấn đề nữa http://stackoverflow.com/questions/15790909/gem-ice-cube-for-reccurence-events – Gabi

+0

không có vấn đề, cảm ơn Swards cho phần đầu tiên :) – Zippie

4

Bạn có thể làm điều đó cả hai cách:

class Event < ActiveRecord::Base 
    ... 

    class << self 
    def events_and_repeats(date) 
     where(shedule:date.beginning_of_month..date.end_of_month) 
    end 
    end 

end 

hoặc

class Event < ActiveRecord::Base 
    ... 

    def self.events_and_repeats(date) 
    where(shedule:date.beginning_of_month..date.end_of_month) 
    end  
end 
+1

Cảm ơn bạn! Bây giờ tôi sẽ biết nó) – Gabi

+0

Bạn được chào đón! Một vài điều, bạn không cần '@ events'at tất cả, phương thức ruby ​​sẽ trả về câu lệnh được đánh giá cuối cùng. Hơn nữa, 'self.where()' cũng không cần thiết vì bạn đang gọi 'where()' đã ở trong 'self'. Vui vì tôi đã có thể giúp bạn! –

0

Chỉ cần cho rõ ràng hơn:

class Foo 
    def self.bar 
    puts 'class method' 
    end 

    def baz 
    puts 'instance method' 
    end 
end 

Foo.bar # => "class method" 
Foo.baz # => NoMethodError: undefined method ‘baz’ for Foo:Class 

Foo.new.baz # => instance method 
Foo.new.bar # => NoMethodError: undefined method ‘bar’ for #<Foo:0x1e820> 

Class method and Instance method

Các vấn đề liên quan