Rails将文件呈现为HTML而不是JS。使用兰萨克宝石

时间:2019-03-22 14:39:42

标签: javascript ruby-on-rails ajax ruby-on-rails-5 ransack

与这个噩梦般的噩梦,并认为我要疯了。它一定很简单。我正在为我的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');

enter image description here

enter image description here

然后是我可以看到遥控器的最后一点,在主页版本中显然没有发生。

enter image description here

enter image description here

由于某种原因,表单标签未出现在主页示例中。早上把头发剩下的东西拉出来后,我才注意到这部分。新鲜的眼睛会很棒。现在,关于Ransack的另一件事是,我的路由具有要列出的资源,但实际上我只是将root_path连接到我的页面控制器home动作,这对Ransack来说有关系吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

很抱歉。我实际上想通了。看评论。已经是对表单标签的引用,因此使Ransack表单调用变得多余(与其他开发人员进行此操作,因此在页面代码中没有注意到上面的表单标签。我这很愚蠢)。删除此样式后,我可以看到远程呼叫正在运行。但是,它仍从清单控制器中调用数据。我只需要将变量更改为其他@q,然后将url path选项添加到如下形式。谢谢大家阅读。抱歉,要浪费时间。有时只需要把整个事情写下来就可以意识到自己是多么愚蠢。假设可以作为其他人前进的参考。

<%= search_form_for @q, url: root_path, remote: true do |f| %>

允许我使用Ransack功能引用root_path。