ruby-on-rails 具有远程处理错误消息的Rails4窗体

daolsyd0  于 2023-08-08  发布在  Ruby
关注(0)|答案(2)|浏览(144)

我有一个简单的远程表单,像这样:
第一个月
在我的控制器中,我检查是否接受EULA的形式:

def create
    if (params[:question][:eula] != 1)
      puts "ERROR!"
      respond_to do |format|
          return format.json {render :json => {:error_message => "FOOOO", :success => false } }
      end
    end
    @question = Question.new(question_params)

    respond_to do |format|
      if @question.save
        format.html { redirect_to @question, notice: 'question was successfully created.' }
        format.json { render :show, status: :created, location: @question }
      else
        format.html { render :new }
        format.json { render json: @question.errors, status: :unprocessable_entity }
      end
    end
  end

字符串

如何访问create.js.erb文件中的:error_message:success

q3qa4bjr

q3qa4bjr1#

您可以执行 AJAX 请求
添加ID到表单:id => "question-form"

= form_for :question, :url => question_path, :remote => true, 
                  :html =>{:class => 'question-form', :id => "question-form"} do |form|

字符串
和JavaScript文件中的任何地方

$("#question-form").on("submit", function(e){
    e.preventDefault();
    var form = $(this);
    var request = $.ajax({
        method: "POST",
        beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
        url: "/questions",
        dataType: "json",
        data: form.serialize()
    })

    request.done(function(res){
        console.log(res.success);
    })

    request.catch(function(jqXHR){
        console.log(jqXHR.responseJSON)
    })

})

vlf7wbxs

vlf7wbxs2#

如何访问create.js.erb文件中的:error_message:success

Rails的方式(尽管它有某些缺点)是继续在表单中使用remote: true,然后在create.js.erb模板中使用示例变量,而不是渲染JSON。

def create
  @error_message = "FOOOO"
  @success = false

  render "create", handlers: ["js.erb"]
end

字符串
(我已经简化了控制器-您仍然可以响应特定的格式等等。
这些示例变量将在create.js.erb中可用:

<% if @success %>
  console.log('success');
<% end %>

相关问题