【发布时间】:2015-08-10 17:24:45
【问题描述】:
我想知道执行下一个任务的最佳做法是什么。
我有一个搜索结果要从索引操作中显示。每个单独的记录都会通过显示操作显示在弹出窗口中。
如果只找到一条记录,我想做的是执行弹出窗口。
这是我已经尝试过的。
def index
@companies = Company.search(params[:query]).results
@count = @companies.total
if @count == 1
return
render company_path
end
结束
似乎 return、redirect_to 或 render 在一个动作中表现不佳。
还有其他想法吗?
更新添加了显示操作
def show
sleep 1/2
client = Elasticsearch::Client.new host:'127.0.0.1:9200', log: true
response = client.search index: 'companies', body: {query: { match: {_id: params[:id]} } }
@company = response['hits']['hits'][0]['_source']
respond_to do |format|
format.html # show.html.erb
format.js # show.js.erb
format.json { render json: @company }
end
# more code
end
【问题讨论】:
-
为什么条件语句中有
return?render company_path永远无法到达。 -
这会帮助
return redirect_to @companies.first if @count == 1 -
@Sculper 我有一个 return 因为我必须先显示结果然后执行弹出窗口
-
谢谢@Athar。这可能是一个很好的解决方案,但在我的表演动作中,我正在执行第二个查询。我会将我的表演动作添加到问题中。
-
好的,如果您为公司呈现显示页面视图,则 url 将保持为
/companies,这看起来不太好,但如果您重定向到显示操作,则会产生额外的搜索查询开销。你可以决定你应该去哪一个。如果您需要在不执行操作的情况下呈现显示页面。我想您可能需要在此if @companies.count == 1之后添加此@company = @companies.first,然后在render company_path并在渲染company_path 后返回。
标签: ruby-on-rails ruby actioncontroller elasticsearch-rails