【问题标题】:How to render a javavscript file in rails controller for create method如何在 Rails 控制器中为创建方法呈现 javascript 文件
【发布时间】:2015-06-27 11:00:25
【问题描述】:

当用户没有填写表单的任何部分时,我需要呈现一个 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");

【问题讨论】:

  • 你必须使用 JavaScript 告诉他们有错误吗?我通常使用flash[:warning]之类的消息,然后再次渲染编辑页面。
  • 是的,它需要是一个警告框。需要它的是页面样式的方式;我的设计师也希望这样......
  • 你想要的是使用 JavaScript 进行表单验证
  • 你为什么要它甚至在控制器中点击创建方法?为什么不在用户点击提交按钮后检查它并仅在填写字段时发送它
  • 尝试将您的线路更改为format.js { render :js => "my_function();" }。有关详细信息,请参阅this question

标签: javascript ruby-on-rails forms


【解决方案1】:

如果您绝对必须使用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 .

【讨论】:

  • 但正如其他人所说,添加客户端验证是可行的方法。这仍然需要往返服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多