如何在rails控制器中为create方法呈现javavscript文件

How to render a javavscript file in rails controller for create method

本文关键字:方法 javavscript 文件 create rails 控制器      更新时间:2023-09-26

当用户没有填写表单的任何部分时,我需要呈现一个javascript文件来显示一个警告框。在填写完所有输入之前,表单不会保存。我尝试了很多不同的组合,我觉得我离解决方案更远了。

def create
  @question = Question.new(question_params)
    if @question.save
      redirect_to new_question_share_quiz_path(@question)
    else
    respond_to do |format|
      format.js { render :action => "try" }
    end
  end

结束

try.js文件在views文件夹中。

try.js文件只有一行代码

alert("You need to fill out the whole form");

如果你绝对必须用alert来做,这是一个解决方案:

如果表单有效,请创建一条快闪消息。

def create
  @question = Question.new(question_params)
  if @question.save
    redirect_to new_question_share_quiz_path(@question)
  else
    respond_to do |format|
      render :new, alert: 'The form is not valid'
    end
  end
end

/views/layouts/application.html.erb添加闪光灯。

<% if flash.any? %>
<ul id="flash">
  <% flash.each do |key,message| %>
  <li class="flash flash-<% key %>">message</li>
  <% end %>
</ul>
<% end %>

然后添加使用javascript创建警报,如果有"警报"级别的闪光。

$('.flash-alert', $('#flash')).each(function(){
  alert($(this).text());
});
<!-- THIS IS JUST SO THAT YOU CAN RUN THE SNIPPET!! -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="flash">
  <li class="flash flash-notice">Should trigger an alert</li>
  <li class="flash flash-alert">Should trigger a alert</li>
</ul>

这里的优点是,这是在rails中处理表单反馈的传统方式,当你的设计师意识到在纠正表单之前必须关闭对话框很烦人时,你可以关闭javascript