모델

2014-02-19 3 views
1

에서 인덱스의 전의 방법과 새로운 전화를 어떻게 나는 것을 어떻게 할 수 있습니다, 모델

def self.interests(user) 
    City.joins("INNER JOIN property_of_interests ON property_of_interests.city_id = cities.id").where(:property_of_interests => {:user_id => user}) 
end 

내가 지수와 새로운 행동 이전에 내 컨트롤러에이 메소드를 호출하려면, 내 모델에서 방법을 ?

그리고 모든 모델과 컨트롤러는 다른 엔티티

나는 방법에 CURRENT_USER 인수를 전달하는 방법을 컨트롤러에 before_filter 사용하는 경우의입니까?

+0

는 당신이 더 당신이 원하는 무엇인지 설명 할 수, 제발? –

+0

아마도'before_filter' (http://rails-bestpractices.com/posts/22-use-before_filter) – lurker

+0

을 사용하지만 메서드에 current_user 인수를 전달하고 싶습니다. –

답변

3

람다 ({@interests = Widget.interests current_user})를 before_action에 전달하여 원하는 것을 얻을 수 있습니다.

응용 프로그램/컨트롤러/widgets_controller.rb

class WidgetsController < ApplicationController 
    before_action(only: [:show]) {@interests = Widget.interests current_user} 

    def show 
    # do something with @interests 
    end 
end 

응용 프로그램/모델/widget.rb

class Widget < ActiveRecord::Base 
    def self.interests(user) 
    City.joins("INNER JOIN property_of_interests ON property_of_interests.city_id = cities.id").where(:property_of_interests => {:user_id => user}) 
    end 
end 
+0

모델 내부에 관심 분야를 유지하고 싶습니다. –

+0

@HrishikeshSardar 나는 더 간단한 접근 방법을 찾아 내 대답을 업데이트했다. – franksort

+0

레일 3에는 ActionMaler :: Base에 대한 콜백이 없으므로 아무런 방법도 제공하지 않습니다. before_action –