2011-11-22 37 views
28

Nếu tôi có một phương pháp trong bộ điều khiển khác với bộ điều khiển tôi đang viết và tôi muốn gọi phương thức đó, có thể hay không, hoặc tôi nên xem xét việc chuyển phương thức đó sang người giúp đỡ?Gọi phương thức từ bộ điều khiển khác

+1

Bạn có thể thêm sự kiện vào sự cố bạn muốn giải quyết bằng cách gọi phương thức của bộ điều khiển khác không? Hiện tại nó khá mơ hồ, và giải pháp sẽ phụ thuộc vào vấn đề. – mliebelt

+0

Thật vậy, hãy xây dựng những gì bạn đang cố gắng giải quyết. phương pháp chia sẻ đang làm gì? – nathanvda

Trả lời

45

Bạn về mặt kỹ thuật có thể tạo một thể hiện của bộ điều khiển khác và các phương thức gọi trên đó, nhưng nó tẻ nhạt, dễ bị lỗi và không được khuyến khích.

Nếu chức năng đó là phổ biến cho cả hai bộ điều khiển, bạn có lẽ nên có nó trong ApplicationController hoặc bộ điều khiển siêu lớp khác của sáng tạo của bạn.

class ApplicationController < ActionController::Base 
    def common_to_all_controllers 
    # some code 
    end 
end 

class SuperController < ApplicationController 
    def common_to_some_controllers 
    # some other code 
    end 
end 

class MyController < SuperController 
    # has access to common_to_all_controllers and common_to_some_controllers 
end 

class MyOtherController < ApplicationController 
    # has access to common_to_all_controllers only 
end 

Tuy nhiên, cách khác để làm điều đó là jimworm được đề xuất, là sử dụng mô-đun cho chức năng chung.

# lib/common_stuff.rb 
module CommonStuff 
    def common_thing 
    # code 
    end 
end 

# app/controllers/my_controller.rb 
require 'common_stuff' 
class MyController < ApplicationController 
    include CommonStuff 
    # has access to common_thing 
end 
+5

Hoặc bao gồm từ một 'mô-đun'. – jimworm

+0

'include GoodSuggestion' Thanks @jimworm – edgerunner

+1

Tạo một thể hiện của bộ điều khiển khác ???? Arrrrrrrgggh (thực sự). Một lựa chọn khác, vì câu hỏi quá mơ hồ: di chuyển mã sang các mô hình. – nathanvda

2

Hãy thử và dần dần di chuyển bạn phương pháp để mô hình của bạn, nếu họ không áp dụng đối với một mô hình sau đó một helper và nếu nó vẫn cần phải được truy cập ở nơi khác đặt trong ApplicationController

+1

Tôi sẽ không bao giờ di chuyển mã từ một bộ điều khiển để trợ giúp, thay vì một mô-đun sống trong '/ lib'. Chỉ xem mã nên sống trong một người trợ giúp. – nathanvda

+1

đặt một cái gì đó trong một người trợ giúp chỉ ngắn ngủi. bạn sẽ nhận được điểm mà bạn không phải đặt trong một lib/ném tất cả mọi thứ vào một mô-đun không phải là quá tốt hoặc. –

+1

Tôi thích sử dụng các mô-đun hơn người trợ giúp, vì chúng là OO thực, tôi có thể bao gồm/mở rộng chúng theo ý muốn. Tôi có thể nhóm các công cụ lại với nhau có ý nghĩa thực tế. Người trợ giúp chỉ là xô. Tôi khuyên bạn chỉ nên sử dụng chúng cho các phương pháp liên quan đến xem. Không chắc chắn ý bạn là gì với 'bạn sẽ đạt tới điểm .... '. – nathanvda

0

Nếu bạn yêu cầu đã làm với một số hoạt động DB, sau đó bạn có thể viết một hàm thông thường (phương pháp lớp) bên trong mẫu đó. Các hàm được định nghĩa bên trong mô hình có thể truy cập được trên tất cả các bộ điều khiển. Nhưng giải pháp này không áp dụng cho tất cả các trường hợp.

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