Pregunta

Estoy tratando de armar una asociación que se aprovecha de la indexación de documentos subclave de Mongo. Por ejemplo, tengo dos colecciones, mensajes y temas. Mensajes tienen una tecla de etiquetas, que es un conjunto de etiquetas indexada para el puesto - bastante vainilla. Lo que quiero hacer sin embargo, es tener algo en mi modelo como tema:

class Topic
  key :name, String
  many :posts, :query_conditions => {:tag => lambda {|i| i.name} }
end

La idea es que tengo un tema con el nombre de "MongoMapper", cuando invoco @ topic.posts, quiero que la asociación que se ejecuta el equivalente a:

post.find({tag: "mongomapper"})

Me eficaces, no hay algo así como la opción de finder_sql AR (completo con la capacidad de interpolar valores por ejemplo en la consulta), que no he podido encontrar en las opciones de asociación MM todavía. Hace nada de eso existe?

¿Fue útil?

Solución

Después de cavar a través de los elementos internos MM, decidí esto no iba a suceder. Específicamente, las asociaciones has_many siempre están limitados por una: foreign_key => proxy_owner._id Además de la consulta; no hay manera de evitar que se añaden criterios, lo que significa que no se puede establecer asociaciones con los buscadores personalizados.

acabo de utilizar un ámbito con nombre en mi modelo y después un método de ayuda en el modelo de tema.

class Post
  scope :tagged, lambda {|tag| where(:tags => tag)}
end

class Topic
  def posts
    Post.tagged(name.downcase)
  end
end

que devuelve un proxy consulta, por lo que para todos los efectos, que pueden tratarlo como una asociación con fines de sólo lectura. Funciona bastante bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top