2011-07-29 5 views
0

내 응용 프로그램에 거래가 있고 주문이 있습니다. 거래를 볼 때 내 관리 영역 링크를 클릭하여 주문을 수동으로 처리하고 있습니다. 내 /controllers/access/deals_controller.rb에서다른 컨트롤러 - 레일 3의 모델 방법 사용

보기/액세스/거래/index.html.erb

<%= link_to "Process Orders", process_orders_access_deal_path(deal) %> 

, 나는 다음과 같은 방법이있다. 내가 주문이 즉시 처리되지 않을 것이다 변경을 필요로하기 전에 거기를 설정하기 때문에

def process_orders 
    @deal = Deal.find(params[:id]) 
    @orders = @deal.orders.where("state" == ?, "pending") 
    @orders.each do |order| 
     order.purchase 
    end 
end 

내 구매 방법은 내 거래 모델에없는, 내 수주 모델입니다.

주문 컨트롤러의 구매 방법.

def purchase 
    response = Order.gateway.purchase(order_amount, billing_id, options) 
end 

내 /controllers/access/deals_controller.rb에서 내 order.rb 모델의 구입 방법에 액세스하는 방법 그렇다면 할 수 있습니까?

답변

3

전화 해 보았습니까?

컨트롤러와 모델은 불가사의 한 마술로 연결되어 있지 않습니다. 원하는 다른 클래스 (예 : 컨트롤러)에서 모든 클래스 (예 : 모델)를 참조 할 수 있습니다. 제한이 없습니다.

+0

안녕하세요, Ryan, 감사합니다.하지만 이전에 그렇게하지 않아도되었으므로 확실하지 않습니다. 내 주문 모델에서는 @ order.purchase를 호출하지만 거래 컨트롤러에서는 Order 모델에서 메서드를 호출하는 방법을 잘 모르겠습니다. –

+1

@ 로버트 : '주문'모델의 인스턴스에서 사용할 수 있기 때문에이 방법을 사용할 수 있습니다. 당신은 당신이 속한 컨트롤러를 기반으로하는 모델에 제한이 있다는 생각을 멈출 필요가 있습니다. 정확히 당신이하고있는 것처럼'order.purchase'를 호출하면 올바르게 동작 할 것입니다. –

+0

라이언에게 도움을 주셔서 감사합니다. –

-2

레일즈를 사용하기 전에 루비에서 객체 지향 프로그래밍 및 클래스에 대해 읽어보십시오. 개인적으로 생각하지 말고 알파벳에 대한 이해없이 책을 쓸 수는 없습니다. 나는 내 자신의 경험으로 그것을 안다.

+2

나는 실제 세계의 문제를 기반으로하고 배우기를 원하며 주제에 대한 더 많은 정보를 읽습니다. 나는 Ruby와 OOP에 대한 지식이 조금 부족하여 이것이 좋은 생각이라고 생각한다. :) –

관련 문제