tôi đã xác định phương pháp trong ApplicationControllerLàm thế nào để gọi các phương thức quy định tại ApplicationController trong các mô hình
class ApplicationController < ActionController::Base
helper_method :get_active_gateway
def get_active_gateway(cart)
cart.account.gateways
end
end
Khi tôi gọi phương pháp này trong mô hình
class Order < ActiveRecord::Base
def transfer
active= get_active_gateway(self.cart)
end
end
Nó ném lỗi undefined local variable get_active_gateway
.
Vì vậy, tôi đã viết
class Order < ActiveRecord::Base
def transfer
active= ApplicationContoller.helpers.get_active_gateway(self.cart)
end
end
Sau đó, nó đã được ném error undefined method nil for Nilclass
.
Tôi đang làm việc trong Rails 3.2.0.
Khi hai câu trả lời cho biết, bạn không nên gọi các phương thức điều khiển từ mô hình của mình. Nó không được khuyến khích. Đọc vào Bộ điều khiển xem mô hình (MVC). Để giữ cho mọi thứ độc lập. Về cơ bản Mô hình đàm phán để lưu trữ, các cuộc đàm phán điều khiển để mô hình (không phải là cách khác xung quanh), và xem các cuộc đàm phán để điều khiển. –
Do thiết kế Rails, và loại bỏ khả năng gọi ApplicationController.helpers (bây giờ), bạn phải 'lặp lại chính mình' với một def-code def trong mô hình. Hãy chắc chắn để thêm một bình luận ở cả hai nơi vì vậy nếu bạn thay đổi nó ở một nơi, bạn nhớ để đi và thay đổi nó trong khác. – JosephK