组合轨道中两个表的数据

时间:2015-08-08 00:05:00

标签: mysql ruby-on-rails database join

我有两个模型,一个属于另一个。它们看起来像这样:

after_filter :store_location

def store_location
  # store last url - this is needed for post-login redirect to whatever the user last visited.
  return unless request.get? 
  if (request.path != "/users/sign_in" &&
      request.path != "/users/sign_up" &&
      request.path != "/users/password/new" &&
      request.path != "/users/password/edit" &&
      request.path != "/users/confirmation" &&
      request.path != "/users/sign_out" &&
      !request.xhr?) # don't store ajax calls
    session[:previous_url] = request.fullpath 
  end
end

def after_sign_in_path_for(resource)
  session[:previous_url] || root_path
end

class LittleClass < ActiveRecord::Base
  has_many :little_class_sessions
end

class LittleClassSession < ActiveRecord::Base belongs_to :little_class end 有一个名为LittleClassSession的列。我希望得到所有little_class_id,但也会在相同的哈希值中将相关的LittleClassSession返回给我。

有没有办法在Rails中构建这个?或者有一个干净的方法来做到这一点?

这是我使用LittleClass构建到LittleClassLittleClassSession模型的内容吗?

1 个答案:

答案 0 :(得分:1)

当您查询ActiveRecord时,您将获得一个ActiveRecord:Relation数组。它是一个启动查询的特定实体。您当然可以加入依赖表(如您的示例中的一对多关系)。但是你仍然需要通过这些依赖关系来构建你需要的任何对象。

这是我的意思草图(假设我们搜索具有特定小班级ID的所有小班级会话):

class_sessions = LittleClassSession.includes(:little_class).where(:little_classes => {:id => 1})

class_sessions.each do |relation| 
   test_hash = relation.attributes.merge!({:little_class => relation.little_class.attributes}); 
   puts test_hash 
end

test_hash将包含小类会话的所有属性以及相应键下的小类的属性。