Tôi muốn có Trang tổng quan để hiển thị tóm tắt nhiều mô hình và tôi đã triển khai đối số bằng cách sử dụng Trình dẫn mà không có dữ liệu riêng. Tôi sử dụng một lớp ActiveModel (không có bảng dữ liệu):Cách chuyển đối số cho phương thức ủy nhiệm trong Rails
class Dashboard
attr_accessor :user_id
def initialize(id)
self.user_id = id
end
delegate :username, :password, :to => :user
delegate :address, :to => :account
delegate :friends, :to => :friendship
end
Bằng đại biểu, tôi muốn để có thể gọi Dashboard.address
và trở lại Account.find_by_user_id(Dashboard.user_id).address
.
Nếu Trang tổng quan là lớp ActiveRecord, thì tôi có thể đã khai báo Dashboard#belongs_to :account
và ủy nhiệm sẽ hoạt động tự động (tức là, Tài khoản sẽ biết nó sẽ trả về thuộc tính địa chỉ từ tài khoản user_id
bằng to user_id
trong trường hợp Trang tổng quan).
Nhưng Trang tổng quan không phải là lớp ActiveRecord, vì vậy tôi không thể khai báo belongs_to
. Tôi cần một cách khác để báo cho Tài khoản tra cứu đúng hồ sơ.
Có cách nào để khắc phục sự cố này không? (Tôi biết tôi có thể giả mạo Bảng điều khiển để có một bảng trống, hoặc tôi có thể viết lại phương pháp dụ của người dùng để phương pháp lớp mà có đối số. Nhưng những giải pháp này là tất cả các hack).
Cảm ơn bạn.
Điều này không có ý nghĩa nhiều. 'Id' là gì? Đó có phải là một con số không? (Bạn không thể 'gửi (" 123 ")', đó không phải là tên phương thức hợp lệ.) Bạn không thể sử dụng 'Bảng điều khiển.user_id' với' attr_accessor: user_id', một là một lớp và lớp kia là cá thể. .. Vui lòng làm rõ và đưa ra ví dụ về cách bạn mong đợi điều này hoạt động. –
Xin chào Andy, có thể tôi không đủ rõ ràng. Xin lưu ý rằng đây không phải là lớp ActiveRecord :: Base thông thường. Vì vậy, tôi cần một thuộc tính để giữ id của current_user. (Tôi không muốn giữ id này vĩnh viễn). Bởi đại biểu, tôi muốn để có thể gọi Dashboard.address và lấy lại Account.find_by_user_id (Dashboard.user_id) .address. Tôi đã cố gắng ủy nhiệm hàm này cho lớp Account, nhưng tôi cần chuyển giá trị user_id vào tài khoản bằng cách nào đó, để nó biết được cá thể tài khoản nào cần làm việc với nó. – AdamNYC