我有两个模型,一个属于另一个。它们看起来像这样:
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
构建到LittleClass
或LittleClassSession
模型的内容吗?
答案 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将包含小类会话的所有属性以及相应键下的小类的属性。