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オブジェクトを呼び出すことができるインスタンスメソッドを記述します。
関連する問題