与这个噩梦般的噩梦,并认为我要疯了。它一定很简单。我正在为我的Listings#index工作。使用remote:true在搜索表单中将结果呈现为JS部分没有问题。都好。但是...
我希望在应用程序的root_page上使用相同的功能。因此,实质上是一个搜索栏,当用户搜索时,该搜索栏将在搜索栏下方部分显示搜索结果。我可以使它与ransack一起正常工作,从而刷新页面并从局部显示结果。我不会像清单控制器那样将部分渲染为JS。
代码位非常相似。我将在下面将它们都添加。 Ransack可以正常工作,只是无法识别遥控器:是的。我研究了chrome上的inspect,实际上可以看到由于某种原因而导致表单类未正确注册。我将同时截图工作和非工作位。
因此,这只是Ransack搜索查询无法识别遥控器的问题:从外观上看是正确的。有什么猜想吗? Ransack是否需要在表单中添加一些特殊内容,以使其能够从名为home.html.erb的页面运行?而不是index.html.erb?很想告诉我我在这里做蠢事。谢谢。
用于在listing_controller中搜索的工作代码段
listing#index
files = {'image_%s.jpg' % x: ('image_%s.jpg' % x, open(file, 'rb'), 'image/jpeg') for x, file in enumerate(urls)}
列出index.html.erb
def index
@search = Listing.ransack(params[:q])
@data = @search.result(:distinct => true)
@listings = @data.to_a
end
列出index.js.erb
<%= search_form_for @search, remote: true do |f| %>
<%= f.search_field :title_or_content_or_aircraft_highlights_or_airframe_engine_apu_weight_or_avionics_connectivity_or_interior_or_exterior_or_additional_info_cont, placeholder: "Search by keyword..", class: "form-control" %>
<%= f.submit "Show results", class: "btn btn-secondary btn-lg btn-block" %>
<% end %>
<div class="col-md-9" id="aircraft_listing">
<%= render partial: "shared/aircrafts-list" %>
</div>
像梦一样工作。
无法打球的页面控制器。搜索有效,但没有ajax调用
pages#home
$("#aircraft_listing").html("<%= j render partial: 'shared/aircrafts-list' %>");
页面home.html.erb
def home
@search = Listing.ransack(params[:q])
if params[:search].present?
@data = @search.result(:distinct => true)
@listings = @data.to_a
end
end
页面home.js.erb
<%= search_form_for @search, remote: true do |f| %>
<%= f.search_field: title_or_content_or_aircraft_highlights_or_airframe_engine_apu_weight_or_avionics_connectivity_or_interior_or_exterior_or_additional_info_cont, placeholder: "Search by keyword..", class: "form-control-lg form-control-borderless" %>
<%= f.submit "Search", class: "btn btn-secondary btn-lg" %>
<% end %>
<div id="home_search_list">
<%= render partial: "shared/home-search-list" %>
</div>
搜索运行时显然不会弹出警报。
部分已命名(刚刚再次检查它们以确保我不会发疯)
$("#home_search_list").html("<%= j render partial: 'shared/home-search-list' %>");
alert('Hello Rails');
然后是我可以看到遥控器的最后一点,在主页版本中显然没有发生。
由于某种原因,表单标签未出现在主页示例中。早上把头发剩下的东西拉出来后,我才注意到这部分。新鲜的眼睛会很棒。现在,关于Ransack的另一件事是,我的路由具有要列出的资源,但实际上我只是将root_path连接到我的页面控制器home动作,这对Ransack来说有关系吗?
谢谢。
答案 0 :(得分:0)
很抱歉。我实际上想通了。看评论。已经是对表单标签的引用,因此使Ransack表单调用变得多余(与其他开发人员进行此操作,因此在页面代码中没有注意到上面的表单标签。我这很愚蠢)。删除此样式后,我可以看到远程呼叫正在运行。但是,它仍从清单控制器中调用数据。我只需要将变量更改为其他@q,然后将url path选项添加到如下形式。谢谢大家阅读。抱歉,要浪费时间。有时只需要把整个事情写下来就可以意识到自己是多么愚蠢。假设可以作为其他人前进的参考。
<%= search_form_for @q, url: root_path, remote: true do |f| %>
允许我使用Ransack功能引用root_path。