如何在控制器的动作中显示模态窗口?

Vit*_*kyi 2 javascript ruby ruby-on-rails

所以我得到了带有操作索引和 full_search 的控制器 PagesController。动作索引用于主页。在主页上,我有“搜索”按钮和 text_field。如果用户在 text_field 中键入 sometiong 并单击“搜索”按钮,他/她将执行 full_search。在此操作中,我尝试通过用户的查询查找某些内容。如果我没有找到任何东西,我应该只显示一个“无结果”的模式窗口,否则重定向到另一个页面

def full_search
  ...do search...
  if search_result.empty?
    show modal window with text 'no results'
  else
    redirect to another page
  end
end
Run Code Online (Sandbox Code Playgroud)

如何显示模态窗口(如 js 中的函数警报)?我想我必须使用 javascript..但是在哪里???

如果 search_result 为空,我不需要渲染任何视图......我只需要停留在同一页面并显示模态窗口

Kum*_*mar 5

第1步。

在您呈现的视图中,有一个 ID 为“my_modal_content”的 div,其中将插入模态的内容并显示模态。

第2步。

渲染一个 js.erb 文件,它将模态附加到我们的页面

#your rails controller method
def my_method
  if something == true
    respond_to do |format|

      format.js { render :partial => 'somewhere/somefile.js.erb' }
      #I'm assuming its js request
    end
  else
    redirect to another page
  end
end
Run Code Online (Sandbox Code Playgroud)

第四步。

像这样写你的 js.erb 文件,它附加 modal 然后显示它。

#_somefile.js.erb file

$("#my_modal_content").html("<%= escape_javascript(render 'somewhere/my_modal') %>");
$("#myModal").modal('show');
Run Code Online (Sandbox Code Playgroud)

第 3 步。

模态部分文件_my_modal.html.erb放置在views/somewhere/您准备好的模态内容中。

<div class="modal fade" tabindex="-1" id="myModal" role="dialog">
  <div class="modal-dialog">
    ...<!-- all your content insdie -->
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

更新

如果你想显示警报,它非常简单。你只是渲染js

if search_result.empty?
  message = "No result found. Try something else!"
  respond_to do |format| 
    format.js { render js: "alert(#{message});" }
  end
else
  redirect to another page
end
Run Code Online (Sandbox Code Playgroud)