2011-01-24 34 views
16

Tôi có một phương thức trong mô hình 3 đường ray phân tích cú pháp XML bằng nokogiri. Làm thế nào tôi có thể gọi phương thức này trong bảng điều khiển để kiểm tra nó.Cách gọi đường ray 3 phương thức mô hình trong bảng điều khiển

Dưới đây là toàn bộ lớp (Tôi đang cố gắng để gọi generate_list):

class Podcast < ActiveRecord::Base 

validates_uniqueness_of :name 

serialize :hosts 

def generate_list 

# fetch the top 300 podcasts from itunes 
itunes_top_300 = Nokogiri.HTML(open("http://itunes.apple.com/us/rss/toppodcasts/limit=300/explicit=true/xml")) 

# parse the returned xml 
itunes_top_300.xpath('//feed/entry').map do |entry| 
    new_name = entry.xpath("./name").text 
    podcast = Podcast.find(:all, :conditions => {:name => new_name}) 
    if podcast.nil? 
    podcast = Podcast.new(
     :name => entry.xpath("./name").text, 
     :itunesurl => entry.xpath("./link/@href").text, 
     :category => entry.xpath("./category/@term").text, 
     :hosts => entry.xpath("./artist").text, 
     :description => entry.xpath("./summary").text, 
     :artwork => entry.xpath("./image[@height='170']").text  
    ) 
    podcast.save 
    else 
    podcast.destroy 
    end 
end 

end 

end 

Edit: Wow, 1000 lần xem. Tôi hy vọng câu hỏi này đã giúp mọi người nhiều như nó đã giúp tôi. Thật ngạc nhiên khi tôi nhìn lại điều này, ít hơn một năm trước, tôi không thể tìm ra sự khác biệt giữa các phương pháp thể hiện và phương pháp lớp học. Bây giờ tôi đang viết các ứng dụng hướng dịch vụ phức tạp và các chương trình phụ trợ trong ruby, Rails và nhiều ngôn ngữ/khung công tác khác. Stack Overflow là lý do cho việc này. Cảm ơn bạn rất nhiều đến cộng đồng này để trao quyền cho mọi người giải quyết vấn đề của họ và hiểu các giải pháp của họ.

+0

Hãy chỉ cho chúng ta cách phương pháp này được xác định. –

Trả lời

21

Nó có vẻ như bạn muốn sử dụng phương thức này làm phương thức lớp và vì vậy bạn phải xác định nó như sau:

def self.generate_list 
    ... 
end 

Sau đó, bạn có thể gọi đây là Podcast.generate_list.

+0

Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. – lightyrs

+0

Điều gì sẽ xảy ra nếu phương pháp này có đối số? – bcackerman

+1

@bcackerman Sau đó gọi nó là tuy nhiên bạn sẽ gọi một phương thức lấy đối số: 'Podcast.generate_list (arg1, arg2)' –

1

Đây là một phương pháp dụ vì vậy hãy thử:

Podcast.first.generate_list 

Bạn nên thực hiện một phương pháp học bằng cách tuyên bố nó như sau:

def self.generate_list 

Và gọi nó là:

Podcast.generate_list 
12

Từ mã của bạn, có vẻ như phương pháp generate_list của bạn thực sự xây dựng Podcast và lưu nó?

Bắt đầu lên đường ray console: $ rails console

Và tạo ra một Podcast mới, gọi phương thức trên nó:

> pod = Podcast.new 
> pod.generate_list 
+0

Hoặc chuyển đổi nó thành một phương thức thể hiện khi những người khác đã đề cập đến với' def self.generate_list' – raidfive

+0

Điều này làm việc chính xác. Đảm bảo "tải lại!" nếu bạn thay đổi mã. Tự. không làm việc cho tôi. – bcackerman

3

Hoặc, nếu bạn không muốn phải viết lại mã của bạn, hãy làm theo này .

Loại rails c trên thiết bị đầu cuối để mở giao diện điều khiển, sau đó chỉ cần làm:

p = Podcast.new 
p.generate_list 
Các vấn đề liên quan