使用UJS动态地向表添加行

时间:2014-08-12 17:20:13

标签: javascript jquery ruby-on-rails ruby ajax

我在rails应用程序中使用UJS时遇到问题。我需要动态地向表中添加内容。问题是,即使是警报功能也无法启动。这是一段代码: _form_index.html.erb

 <%= form_tag create_path, remote: true do %>

              <%= text_field_tag :task_name, nil, { class: "textField", placeholder: "Start typing here to create a task...", style: "height:35px;font-size:20px" } %> 

              <%= hidden_field_tag :status, "uncompleted" %>
              <%= hidden_field_tag :project_name, project.name %>

              <%= submit_tag "Add Task", class: "btn btn-success buttonTask" %> 
 <% end %>
<!--- nested render --->
<table class = "table table-bordered table-hover">
        <%= render partial: "form_tasks", collection: project.tasks, as: :task %>
</table>

_form_tasks.html.erb

<tr class = "taskProp">
    <td class = "checkWidth" > 

        <%= check_box_tag task.id, task.id, false, class: "check" %> 

    </td>

    <td class = "textWidth"> <p class = "form-control-static textRender"> <%= task.name %> </p> </td>

    <td>
      <span>

        <%= link_to "", nil, remote: true, class: "glyphicon glyphicon-sort colorTask" %>

        <%= link_to "", edit_task_path(task), class: "glyphicon glyphicon-pencil colorTask" %>

        <%= link_to "", task, method: :delete, remote: true, class: "glyphicon glyphicon-trash colorTask" %>

      </span> 
    </td>
</tr>

然后,如果我提交表单,则从tasks_controller调用create方法: tasks_controller.rb

def create

    project_name = params[:project_name]
    project = Project.where( name: project_name ).take!
    @task = project.tasks.create( name: params[:task_name], status: params[:status], project_id: project_name )

    respond_to do |format|
      if @task.save
        format.html { redirect_to projects_path, notice: 'Task was successfully created.' }
        format.js
      else
        format.html { redirect_to projects_path }
      end
    end
  end

最后一件事情不起作用。我不认为,我需要这部分的AJAX,导致i-net中的多个例子在没有AJAX的情况下使用它,就像这样http://bernatfarrero.com/jquery-and-rails-3-mini-tutorial/ 。 任务视图中的create.js.erb! (因为我正在做一个待办事项列表并有项目 - &gt; has_many任务关系)

$(".table-hover").append("<%= escape_javascripts(render(partial: @task)) %>");

所以主要问题是ujs根本不起作用。

1 个答案:

答案 0 :(得分:0)

在打破大脑后,我发现了一个很好的主题来解决我的问题。细节是,我的javascript有问题,有一次我的.js.erb没有渲染。所以这里有一些建议:

  1. 读取,在您单击某个远程表单或链接等后,rails控制台会说什么。检查是否呈现了正确的文件,如果它呈现,则可能存在错误(如我的情况)。

  2. 阅读此主题http://www.alfajango.com/blog/rails-3-remote-links-and-forms/,了解您的javascript发生了什么。