2009-07-31 30 views
5

Tôi có một người dùng sở hữu nhiều điện thoại
Tôi có aa điện thoại trong đó có nhiều bản tóm tắt cuộc gọi
do đó người dùng của tôi có rất nhiều bản tóm tắt cuộc gọiRuby on Rails phương pháp xác định cho mảng

Bây giờ vào mã mà tôi có:

class User < ActiveRecord::Base 
    has_many :phones 
    has_many :call_summaries, :through => :phones 
end 

class Phone < ActiveRecord::Base 
    belongs_to :user 
    has_many :call_summaries 
end 

class CallSummary < ActiveRecord::Base 
    belongs_to :phones 
end 

Tôi muốn tạo báo cáo hiển thị tất cả tóm tắt cuộc gọi cho điện thoại thuộc về người dùng nhất định đó. Tôi đi vào bộ điều khiển và đây là mã của tôi có:

def index 
    @phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
    @call_summaries = @phones.call_summaries.find(:all) 
end 

Nhưng điều này đang trở lại báo lỗi này:

undefined method `call_summaries' for #Array:0x476d2d0

Bất kỳ trợ giúp sẽ được rất nhiều đánh giá cao.

Trả lời

5

Nếu bạn có has_many: thông qua mối quan hệ thiết lập, bạn nên chỉ có thể làm:

@call_summaries = @current_user.call_summaries 

Vấn đề với phương pháp của bạn là bạn đang gọi điện thoại call_summaries trên @phones bộ sưu tập, thay vì trên các trường hợp điện thoại cá nhân.

+0

Ah này làm việc, cảm ơn. Chỉ một điều nữa, tôi thiết lập một khóa ngoại trong call_summaries vì ​​các tên cột khác nhau. Và tôi cũng không tìm cột phones.id. Tôi đang tìm một khóa hex được tạo ra. Đây là SQL được tạo từ lệnh chính xác với khóa ngoài: SELECT call_summaries. * FROM call_summaries INNER JOIN phone ON call_summaries.reported_by = phones.id WHERE phones.user_id = 1 Nó phải là phones.hex_key thay vì phones.id. Làm thế nào để tôi thay đổi điều đó, tôi đã thử các phím nước ngoài nhưng trừ khi tôi đã làm một cái gì đó câm, mà không làm việc. Cảm ơn bạn lần nữa! – Ryan

+0

Có vẻ như bạn sẽ cần sử dụng các tùy chọn: foreign_key và: primary_key trên cả hai đầu của liên kết. Trong CallSummary, ví dụ, hãy thử 'thuộc_to: phone,: foreign_key =>: report_by,: primary_key =>: hex_key' (và làm điều tương tự cho liên kết has_many trong Điện thoại). –

2

@phones là một mảng của các đối tượng Phone. Bạn phải lặp qua mảng đó và thêm các tóm tắt cuộc gọi của mỗi điện thoại vào một mảng duy nhất. Hãy thử điều này:

@phones = Phone.find(:all, :conditions => ["user_id = ?", @current_user.id]) 
@call_summaries = @phones.inject([]){|arr, phone| arr + phone.call_summaries} 
1

Tắt chủ đề và chỉ có tôi là kén chọn, nhưng một công cụ tìm động là dễ đọc hơn:

@phones = Phone.find_all_by_user_id(@current_user) 
+0

phải là '@phones = Phone.find_all_by_user_id (@ current_user.id)' – brittohalloran

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