【问题标题】:Rails rendering file as HTML instead of JS. Using Ransack GemRails 将文件渲染为 HTML 而不是 JS。使用 Ransack Gem
【发布时间】:2019-03-22 14:39:41
【问题描述】:

与这个做噩梦,并认为我会发疯。它一定很简单。我已经搜查了我的清单#index。它在搜索表单中使用 remote: true 将结果呈现在 JS 部分中没有问题。都好。然而……

我希望在应用的 root_page 上也能使用同样的功能。所以本质上是一个搜索栏,当用户搜索时,它将在栏下方显示部分搜索结果。我可以通过 ransack 使其正常工作,从而刷新页面并从部分中显示结果。它不会像列表控制器那样将部分渲染为 JS。

代码位非常相似。我将在下面添加它们。 Ransack 有效,只是无法识别遥控器:真实位。我在 chrome 上查看了检查,实际上可以看到由于某种原因表单类没有正确注册。我将截取工作和非工作位。

所以这只是 Ransack 搜索查询无法识别遥控器的问题:从外观上看是真的。有什么猜测吗? Ransack 是否需要在表单中添加一些特殊的东西才能使其能够在名为 home.html.erb 的页面上工作?而不是 index.html.erb?很想有一双眼睛从字面上告诉我我在这里做的是愚蠢的事情。谢谢。

在listing_controller中搜索的工作代码sn-ps

listing#index

def index
  @search = Listing.ransack(params[:q])
  @data = @search.result(:distinct => true)
  @listings = @data.to_a
end

列出 index.html.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>

列出 index.js.erb

$("#aircraft_listing").html("<%= j render partial: 'shared/aircrafts-list' %>");

像梦一样工作。

不会玩球的页面控制器。搜索有效,但不是 ajax 调用

pages#home

def home
  @search = Listing.ransack(params[:q])
  if params[:search].present?
    @data = @search.result(:distinct => true)
    @listings = @data.to_a
  end
end 

主页.html.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>

主页.js.erb

$("#home_search_list").html("<%= j render partial: 'shared/home-search-list' %>");
alert('Hello Rails');

搜索运行时显然不会弹出警报。

部分已命名(刚刚再次检查以确保我不会发疯)

_aircrafts-list.html.erb
_home-search-list.html.erb

然后我可以清楚地看到远程在主页版本中没有发生的最后一点。

由于某种原因,表单标签没有出现在主页示例中。在早上拔掉我剩下的头发之后,我现在才注意到这部分。新鲜的眼睛会很棒。现在关于 Ransack 的另一件事,事实上我的路线有列出的资源,但我实际上只有 root_path 连接到我的页面控制器主页操作,这对 Ransack 有影响吗?

谢谢大家。

【问题讨论】:

  • 这两个 HTML 文件是否使用相同的布局?我只是问,因为如果不包括 jquery_ujs(来自 application.js),那么 remote: true 将不会做任何事情。
  • 嗨 Veridian,我实际上使用的是相同的布局。必须早点仔细检查。我实际上刚刚解决了这个问题。我是平民,我知道我是平民,但实际写出问题的过程有所帮助。我正在与另一个开发人员(前端)一起这样做,所以我只注意到搜索表单已经嵌套在表单标记中,因此使 Ransack 和 remote:true 调用变得多余。当我意识到这一点时,我看到了来电。注意到它仍在尝试呈现列表控制器引用,因此更改了变量并将 url 路径添加到表单以解决它。
  • 现在就像一个魅力。感谢您花时间阅读我的问题。抱歉,如果这是浪费时间。

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


【解决方案1】:

所以向大家道歉。我实际上想通了这一点。见 cmets。已经是对表单标记的引用,因此它使 Ransack 表单调用变得多余(与另一个开发人员一起执行此操作,因此没有注意到页面代码中上面的表单标记。我的愚蠢的东西)。当我删除这种样式时,我可以看到远程调用正常工作。但是它仍然从列表控制器调用数据。我只需要将变量更改为其他 @q ,然后还将 url 路径选项添加到如下表单中。感谢大家阅读。为浪费时间道歉。有时只需要把整件事写下来才能意识到你是多么愚蠢。假设可以作为其他人前进的参考。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2012-02-28
    • 2021-01-05
    • 2023-03-16
    • 2011-06-05
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多