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

时间:2016-06-14 18:30:10

标签: javascript ruby-on-rails ruby

所以我得到了带有动作索引和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

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

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

2 个答案:

答案 0 :(得分:2)

第1步。

在渲染视图中,设置一个ID为#34; my_modal_content"将插入模态的内容并显示模态。

第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

第4步。

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

#_somefile.js.erb file

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

第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>
  

更新

如果你想表现出警报,那就非常直截了当。你只需渲染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

答案 1 :(得分:0)

您可以在控制器中保存带有true或false的变量: @var = true

然后在视图中使用javascript:

if (<%= @var%> == true) {
  alert("some text");
}