我在控制器索引操作中有以下四个变量,它们从不同的模型中检索数据,如下所示:
@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
中。我怎么能这样做?
答案 0 :(得分:1)
在单个集合中使用不同类型的对象并不好。 但正如你问的尝试
@post = [@forum,@forum,@article,@jobpost].flatten
答案 1 :(得分: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自动调用,但我不确定。
答案 2 :(得分: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
它们不是加入,但它们只在一个变量中。您可以随时访问它们,并随意使用它们。
答案 3 :(得分:0)
我认为你需要像视图模型概念。在不继承ActiveRecord::Base
的情况下创建一个简单的模型类,并将所有对象作为属性添加到新类中并初始化它。
class Post
attr_accessor :forum, :poll, :article, :jobpost
def initialize(forum,poll,article,jobpost)
@forum = forum
@poll = poll
@article = article
@jobpost = jobpost
end
end
在控制器操作中添加以下内容;
@post = Post.new(@forum,@poll,@article,@jobpost)