【问题标题】:Rails flash message not showing upRails Flash 消息未显示
【发布时间】:2015-10-22 10:18:03
【问题描述】:

我正在尝试通过调用一个调用验证 gem 的操作来验证 DEA 编号。

这是风景

  <label for="prescriber_dea_number">DEA number</label>
  <%= text_field_tag :prescriber_dea_number %>
  <%= link_to "Verify DEA number", dea_verification_insight_reports_prescriber_activity_with_patient_request_index_path remote:true %>

这是控制器动作

def dea_verification
dea = params[:prescriber_dea_number]
respond_to do |format|
  if PmpCheckdigit.dea_number?(dea)
    #flash confirmation
    flash[:notice] = "DEA number is valid"
    format.js
  else
    #flash error
    flash[:error] = "DEA number is invalid, Expected something similar to 'AB12345678'"
    format.js
  end
end
end

当点击验证按钮时,页面上不会出现闪烁消息

这是我在日志中得到的内容

Started GET "/insight_reports/prescriber_activity_with_patient_request/dea_verification" for 127.0.0.1 at 2015-07-30 17:15:34 -0400

AbstractController::ActionNotFound (The action 'show' could not be found for InsightReports::PrescriberActivityWithPatientRequestController):

更新:我正在更改为 javascript 函数和弹出框

这里是 JS 函数

$('#add_prescriber_dea_number').on('click', function () {
  var input = $("#prescriber_dea_number");
  console.log(input);
  var data = input.val();
  console.log(data);
  if (data == /^[a-zA-Z]{2}\d{7}$/ || data == /^[a-zA-Z]\d{8}$/){
    result = parseInt(data.charAt(2)) + parseInt(data.charAt(4)) + parseInt(data.charAt(6)) +
    ((parseInt(data.charAt(3)) + parseInt(data.charAt(5)) + parseInt(data.charAt(7))) * 2);
    if (result[-1] == parseInt(data[8])){
      //valid
      alert('valid')
    }
  }
  else{
    //not valid
    alert('not valid')
  }
});

这是视图sn-p

        <%= text_field_tag :dea, '', 'data-id-search-key' => 'employer_dea', id: "prescriber_dea_number" %>
        <%= render partial:"/shared/spinner", locals:{size:'small'} %>
        <button class="btn btn-info" type="button" id='add_prescriber_dea_number'>
          <i class="icon-plus icon-white"></i>Verify</button>

【问题讨论】:

  • link_to 中缺少逗号,应该是:
  • 另外,考虑使用较短的路线名称

标签: ruby-on-rails ajax ruby-on-rails-3 activerecord actionview


【解决方案1】:

我认为 Flash 消息不适用于 AJAX 请求,您应该使用类似 {message: "DEA number is valid"} 的 JSON 进行响应,并使用浏览器上的 javascript 捕获该响应。

【讨论】:

  • 这是真的 - 闪存消息仅适用于完整的服务器请求,不适用于 Ajax。或者,您可以在您的.js.erb 中生成“flash like”消息。
  • 我将更改功能以使用 JS 函数和弹出框
【解决方案2】:

您需要在相应的视图文件夹中创建 .js.erb(在您的情况下可能是 dea_verification.js.erb),以更新应该显示消息的 html。如果您之前设置了 ajax 功能,它可能已经存在。您可以使用以下内容更新您的消息:

$("#flash_message").html("<%= flash[:error] %>");

您可能需要在 js.erb 文件中添加一个逻辑来以不同的方式处理错误和通知。

此外,我认为您忘记为您的操作声明路线(假设它称为“dea_verification”)。您的应用程序正在尝试将您的请求路由到 ID 为“dea_verification”的“显示”操作。这就是你的错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2015-04-02
    相关资源
    最近更新 更多