1

MVC 패턴과 가장 유사한 방식으로 교차 모델 찾기를 수행하려면 어떻게해야합니까?다른 모델의 뷰 또는 컨트롤러에서 모델 액세스

나는 모델 Istc.rb를 가지고 있습니다. 이 모델에 해당하는 인덱스보기에서, 나는이하고 싶은 : 당신이보기에 model.find을 가질 수 없습니다

분명히
= "Last edited by #{User.find_by_id(istc.user_id).first_name}"  

- 그리고뿐만 아니라 이것을 model.find입니다, 그것은 발견입니다 다른 모델에. 그런데 어떻게 이걸 리팩토링 하시겠습니까?

나는 여전히보기 층에 꽤 가까이이 때문에 같은 도우미를 필요에 대한 긴장 :

module UsernameHelper 
    def user_name(model) 
    User.find_by_id(model.user_id) unless User.find_by_id(model.user_id).nil? 
    end 
end 

는 사용자의 범위가 그것을 할 수있는 방법인가?

# User.rb 
scope :lookup, lambda {|model| where("id = ?", model.user_id)} 

# username_helper.rb 
module UsernameHelper 
    def user_name(model) 
    User.lookup(model).first unless User.lookup(model).first.nil? 
    end 
end 

아니면 istcs_controller가 처리해야합니까? 아니면 Istc와 User 모델 모두와 대화하는 별도의 컨트롤러가 있어야합니까?

환영합니다. 이러한 종류의 문제를 우아하게 해결하는 샘플 애플리케이션을보고 싶습니다.

+0

모델과 컨트롤러 또는 뷰 사이에 강제로 1 : 1이 없습니다. 그 부분에 대해 너무 걱정하지 마십시오. 보기를 빌드하는 데 필요한 모델을 사용하십시오. 모델간에 협회가 있습니까? http://guides.rubyonrails.org/association_basics.html 그런 다음 Istc 모델을 통해 사용자를 찾을 수 있습니다. – Rasmus

+0

내게는 최고의 솔루션입니다. –

답변

3

라스무스는 우리가 연결을 활용할 경우, 말했듯이 그 단순한 생각, 사용자 모델 :

class User < ActiveRecord::Base 
    has_many :istcs, :class_name => "Istc" 
end 

ISTC 모델 :

class IStc < ActiveRecord::Base 
    belongs_to :user 
end 

보기 :

<%= "Last edited by #{istc.user.first_name}" %> 

하는 경우 당신은 이것에 만족하지 않습니다. 대체 해결책은 다음과 같습니다.

  1. application_herlper.rb에 도우미 메서드를 작성하십시오 (다른 컨트롤러 뷰에서 사용하고 있으므로).
  2. Istc.rb 모델에서 뷰에서 직접 istc 개체를 호출 할 수있는 인스턴스 메서드를 작성합니다.
관련 문제