发送/接收id视图到控制器

时间:2016-03-14 14:12:03

标签: jquery ruby-on-rails ruby ajax

功能还可以,现在我需要使用像提交表单这样的ajax而不加载页面。

这是我的工作如下:

视图:

<%= form_for :accept, url: accept_path(:id => applicants.id), action: :accept, method: :put  do |f| %>
  <%= f.hidden_field :accept, :value => '1' %>
  <div id="acc" class="btn btn-success">Accept</div>
<% end %>

控制器:

def accept
    @accpt = Apply.find(params[:id])
    if @accpt.update_attributes(accept_params)
      flash[:success] = "Accepted"
      #redirect_to home_path
    else
      render 'accept'
    end
end

的Ajax:

script type="text/javascript">
 $(document).on("click", '#acc', function() {
    $.ajax({
      url: "accept",
      type: "PUT",
      dataType: "json",
      data: { id: $(this).id },
      complete: function() {},
      success: function(data, textStatus, xhr) {
        editor.setValue(data.file_content)
      },
      error: function() {
        alert("Ajax error!")
     }
  });
 });
</script>

路线

put 'accept/:id' => 'applicants#accept', as: :accept

现在显示ajax错误。

我如何找到解决方案?

2 个答案:

答案 0 :(得分:0)

试试这个:

<div id="acc" class="btn btn-success" data-applicant=<%= applicants.id %>>Accept</div>

data: { id: $(this).data("applicant")},

答案 1 :(得分:0)

我认为您应该将其更改为使用核心Rails AJAX功能 - 在处理AJAX时,Rails已经消除了JS中的所有复杂性:

摆脱您发布的所有自定义AJAX javascript。

查看:

<%= form_for :accept, url: accept_path(:id => applicants.id), action: :accept, method: :put, remote: true  do |f| %>
  <%= f.hidden_field :accept, :value => '1' %>
  <%= f.submit 'Accept', class: 'btn btn-success' %>
<% end %>

控制器:

def accept
    @accpt = Apply.find(params[:id])
    if @accpt.update_attributes(accept_params)
      render 'accept'
    else
      render 'error'
    end
end

在/ views / controller_name /中添加一个accept.js文件:

editor.setValue(data.file_content)

在/ views / controller_name /中添加error.js文件:

//code for update failed