当我运行测试时,大多数测试都失败,并显示以下错误。
Failure/Error: let(:user){ FactoryGirl.create(:user) }
RSolr::Error::Http:
RSolr::Error::Http - 500 Internal Server Error
Error: {msg=SolrCore 'test' is not available due to init failure: Error opening new searcher,trace=org.apache.solr.common.SolrException: SolrCore 'test' is not available due to init failure: Error opening new searcher
at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:745)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:299)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
URI: http://localhost:8981/solr/test/update?wt=ruby
Request Headers: {"Content-Type"=>"text/xml"}
Request Data: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">User 13497</field><field name=\"type\">User</field><field name=\"type\">ActiveRecord::Base</field><field name=\"class_name\">User</field><field name=\"phone_number_text\">+11111111200</field><field name=\"name_text\">111.111.1200</field></doc></add>"
Run Code Online (Sandbox Code Playgroud)
开发工作正常。我认为这可能是一个损坏的测试索引,所以:
$ rm -rf …
Run Code Online (Sandbox Code Playgroud) 我有两个模式:User
和Message
由一个连接has_many
关系.我想得到一个users
按其最后一条消息的时间戳排序的列表.
class User < ActiveRecord::Base
has_many :messages
end
class Message < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
当我这样做:
@users = User.includes(:messages).order('messages.created_at DESC').limit(5)
Run Code Online (Sandbox Code Playgroud)
它似乎订购消息,获取最新的5条消息,然后返回与这些消息相关联的用户.所以用户数量可以少于5.我想确保我得到5个用户.
我希望查询得到的最新消息,对于每个请求,下令最后的消息,然后用最新的消息回报用户.所以我想要这样的东西:
@users = User.includes(:messages).order( <messages.last.created_at DESC> )
Run Code Online (Sandbox Code Playgroud)
理想情况下,解决方案将对数据库进行排序,因为我想使用paginate.如果它是相关的我正在使用Postgres.