我正在使用ElasticSearch with Tire来索引和搜索一些ActiveRecord模型,我一直在寻找索引和搜索关联的"正确"方法.我还没有找到对此最好的做法,所以我想问一下是否有人认为他们认为有效的做法.
作为一个示例设置(这是组成但说明了问题),让我们说我们有一本书,有章节.每本书都有一个标题和作者,以及一堆章节.每章都有文字.我们希望将书籍的字段和章节的文本编入索引,以便您可以按作者搜索书籍,也可以搜索包含特定词语的任何书籍.
class Book < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
has_many :chapters
mapping do
indexes :title, :analyzer => 'snowball', :boost => 100
indexes :author, :analyzer => 'snowball'
indexes :chapters, type: 'object', properties: {
chapter_text: { type: 'string', analyzer: 'snowball' }
}
end
end
class Chapter < ActiveRecord::Base
belongs_to :book
end
Run Code Online (Sandbox Code Playgroud)
那么我用以下搜索进行搜索:
s = Book.search do
query { string query_string }
end
Run Code Online (Sandbox Code Playgroud)
这不起作用,即使看起来索引应该这样做.如果相反我索引:
indexes :chapters, :as => 'chapters.map{|c| c.chapter_text}.join('|'), :analyzer => 'snowball'
Run Code Online (Sandbox Code Playgroud)
这使文本可搜索,但显然它不是一个很好的黑客,它失去了实际的相关对象.我尝试过各种搜索,例如:
s = Book.search do
query do …Run Code Online (Sandbox Code Playgroud) 由于Rails升级,我们刚刚使用了redirect_to break,这导致了一个问题.我一直在尝试,我似乎还没有找到一种方法,使用redirect_to的用户发送到与查询参数的非Rails的页面追加,除了通过手动构造URL字符串,这似乎是一个耻辱.以前,只是一个简单的:
redirect_to "http://www.web.com/myurl" "parm"
Run Code Online (Sandbox Code Playgroud)
工作 - 它将"parm"附加到URL,并正确处理多个parms.情况已经不再如此,所以我想知道是否有新的/更好的方法来做到这一点.文档暗示包含哈希应该有效,但它不会:
redirect_to ("http://www.web.com/myurl", :parm => "foo")
redirect_to ("http://www.web.com/myurl", { :parm => "foo" } )
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.手动构建URL字符串工作正常,但有没有人有一个咒语,使这项工作更好的方式?
我正在将GA添加到Rails 3应用程序中,当然这通常非常简单.我添加了GA JS片段,它正好渲染.一切都在Safari中完美运行.但是,在Chrome中,它给了我一个控制台错误:资源被解释为脚本但是使用MIME类型text/html传输:"about:blank",指向加载ga.js文件的JS行:s.parentNode.insertBefore(加油站).我调查过的一些事情:
查看Chrome中的开发者控制台,我看到" http://www.google-analytics.com/ga.js " 请求似乎处于"待处理"状态,并且似乎重定向到"about:blank"由http://www.google-analytics.com/ga.js发起,这没什么意义.
所以这似乎与Rails有关(因为代码片段在Rails之外的HTML中工作),并且不会影响Safari,但除此之外我感到难过.希望我一直盯着它错了,其他人会向我指出明显的......?有没有人遇到过这个?任何想法将非常感谢.
我正在处理一个混乱的形式,其中包括管理具有两级嵌套的部分.它几乎可以工作,但是有一个障碍,我唯一能看到的与其他深层嵌套形式不同的是,有一个belongs_to关系而不是has_many.以下是模型:
Event
has_many :company_events, :dependent => :destroy
accepts_nested_attributes_for :company_events
CompanyEvent
belongs_to :company
accepts_nested_attributes_for :company, :update_only => true
belongs_to :event
belongs_to :event_type
Company
has_many :company_events
has_many :events, :through => :company_events
Run Code Online (Sandbox Code Playgroud)
因此,通过链接表company_events,这是一个相当标准的多对多关系.有问题的表单是使用动态"添加公司"Javascript按钮创建/编辑活动,所有这些都基于Ryan Bates的截屏视频和GitHub回购.
主要形式:
<table id="companies">
<tr><th>Company Name</th></tr>
<% f.fields_for :company_events do |builder| %>
<%= render 'company_event_fields', :f => builder, :f_o => nil %>
<% end -%>
</table>
<p><br/><%= link_to_add_fields "Add Company", f, :company_events, "events" %></p>
Run Code Online (Sandbox Code Playgroud)
包含的表格如下.需要注意的一件重要事情是公司ID是通过Javascript更新设置的,我不会在这里包含,因为它很长.基本上,用户开始键入名称,显示自动完成列表,然后单击名称将在表单中设置公司名称和ID.
<tr class="company_event_fields">
<td>
<% f.fields_for(:company) do |company_form| -%>
<%= company_form.text_field :name, :size => 80 %> …Run Code Online (Sandbox Code Playgroud) 我一直在研究这个,并在这里和那里找到类似问题的参考,但它们都没有导致解决方案.我安装了乘客(2.2.11)和nginx(0.7.64),当我启动并点击Rails URL时,我得到一个错误页面,通知我一个加载错误:
没有这样的文件加载 - /path/to/app/config/environment
从我在网上找到的这似乎是某种用户/权限错误,但我已经尝试了所有逻辑修复:我已经确保/config/environment.rb不是root所有,而是由一个webapp用户.我尝试过设置passenger_default_user,我尝试过设置passenger_user_switching.我甚至尝试过设置nginx用户,尽管这并不重要.我得到了一些不同的结果,但实际上没有任何效果.我希望有人可能拥有这种神奇的设置和权限组合.我可能会尝试退回到早期版本的Passenger,因为我之前从未遇到过这个问题; 自从我成立Passenger之后已经有一段时间了.
谢谢你的任何建议.
编辑:见下面我偶然发现的答案.
我将Mac(OS X)从较旧的Docker安装升级到Docker Toolbox,这意味着我现在正在使用Docker Machine,并且在此过程中发现我使用私有注册表进行推/拉的证书不存在,我不能为我的生活弄清楚如何让它们到位.在我尝试拉测试的那一刻,我得到了可怕的x509: certificate signed by unknown authority错误.我四处搜索,看过Github的问题,但没有任何对我有用.我甚至尝试ssh'ing到机器VM并手动将它们复制到/ etc/ssl/certs,以及其他各种事情,没有运气.我当然不想进入"不安全注册"的东西.这在迁移到docker-machine之前曾经与boot2docker一起使用.
这似乎是一个非常简单的问题:我需要将几个.crt文件放在正确的位置,以便我可以进行推/拉.怎么做到这一点?其次,如何在任何地方都没有记录?我们docker-machine add-cert有一天可以希望得到命令吗?
感谢您的帮助,我希望这里有一个好的答案可以帮助其他人遇到这个问题.
这可能(希望)是一个非常简单的问题,但我似乎无法让它工作,所以我将转向这里的专家.我正在使用一个相当简单的CSS下拉菜单,只涉及一些JQuery.问题是,当我将鼠标悬停在下拉菜单上并打开时,它会将页面上的所有内容向下推,而不是打开它.我试过搞乱z-index,但这似乎不是问题.任何提示都会很棒,提前谢谢.
这是HTML; 抱歉,这不是非常漂亮,我不得不撕掉一堆东西,以使其简单和通用.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML style="zoom: 100%; ">
<HEAD>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script>
</HEAD>
<BODY class="bodyclass" style="background:#BCE2F1; height: 100%;">
<DIV id="maincontainer" style="min-height: 100%;">
<STYLE type="text/css">
#cssdropdown, #cssdropdown ul { font-size: 9pt; background-color: black; list-style: none; }
#cssdropdown, #cssdropdown * { padding: 0; margin: 0; }
#cssdropdown li.headlink { width: 140px; float: left; margin-left: -1px; border: 1px black solid;
background-color: white; text-align: center; }
#cssdropdown li.headlink a { display: block; color: #339804; padding: 3px; text-decoration: …Run Code Online (Sandbox Code Playgroud) 对于Ruby来说还是有些新手,我不知道如何做到这一点...假设我有一个方法可以获取可变数量的参数:
def mytest(*args)将args.to_json结束
显然我可以用我喜欢的任何东西来称它,例如:
mytest('one','two','three')
没问题.但我需要做的是用动态创建的参数集来调用它.例如,我从数据库中提取结果集,我不知道会有多少条目返回.假设我想收集结果id,并用它们调用mytest() - 我将如何构造传递给mytest()的参数集?
这似乎有点显而易见,但无论出于何种原因,事实并非如此.我意识到我可以改为编写mytest()来获取数组或Hash,但我实际上是在尝试在一个我没有编写的插件中调用一个方法.