-1

次のように、さまざまなモデルからデータを取得するコントローラー インデックス アクションに次の 4 つの変数があります。

@forum = Forum.where(:user_id => @users.collect(&:user_id)).all
@poll=Poll.where(:created_by => @users.collect(&:user_id)).all
@article = Article.where(:user_id => @users.collect(&:user_id)).all
@jobpost = Jobplacement.where(:user_id => @users.collect(&:user_id)).all

これらすべての変数のデータを単一の変数に結合したいと考えています@post。これどうやってするの?

4

4 に答える 4

2

単一のコレクションに異なるタイプのオブジェクトを含めるのはよくありません。しかし、あなたが尋ねたように

@post = [@forum,@forum,@article,@jobpost].flatten

更新: Ruby の初心者だったときにこの回答を書きました。この回答を見ると、笑顔がこみ上げてきます。フラット化の目的は、ネストされた配列から単一の配列を作成することです。答えは質問に関係ありません。しかし、私は賛成票に驚いています:)

于 2012-05-16T06:45:40.943 に答える
0

このようなもの:

conditions = { :user_id => @users }  # assuming primary_key is set correctly
                                     # in the User model
@post = Forum.where( conditions ).all   +
        Poll.where( conditions ).all    +
        Article.where( conditions ).all +
        Jobplacement.where( conditions ).all

またはあなたが空想を得たい場合:

models = [ Forum, Poll, Article, Jobplacement ]

@post  = models.reduce [] do |records, model|
  records.push *model.where( :user_id => @users ).all
end

注: .all通常、必要に応じてRailsによって自動的に呼び出されるため、どちらの場合も不要な場合がありますが、定かではありません。

于 2012-05-16T06:50:45.807 に答える
0

それらをハッシュに入れます:

@post = Hash.new
@post['forum']   = Forum.where(:user_id => @users.collect(&:user_id)).all
@post['poll']    = Poll.where(:created_by => @users.collect(&:user_id)).all
@post['article'] = Article.where(:user_id => @users.collect(&:user_id)).all
@post['job_placement'] = Jobplacement.where(:user_id => @users.collect(&:user_id)).all

それらは結合されていません、1 つの変数内にあります。いつでもアクセスして、好きなように操作できます。

于 2012-05-16T06:59:21.163 に答える