来自Checkbox的RoR Ajax和jQuery Post Form

时间:2014-02-20 13:45:38

标签: javascript jquery ruby-on-rails ajax

RoR新手,请原谅任何无知。

在4.0.0.rc1上运行,我使用Devise进行LDAP身份验证

我试图制作一个"任务列表"使用AJAX和jQuery调用在我的索引视图中使用应用程序并遇到一些麻烦。我尝试使用foreach循环遍历任务列表中的元素,每个元素都作为单独的表单列出。任务列表将根据当前日期自动提供。为了开发目的,我有一个text_field元素来代替自动生成的任务列表。

当用户点击复选框时,我想为表单提供POST SUBMIT,同时重定向回初始索引。在SUBMIT上,还具有登录用户的用户ID以及POST提供的日期。即:

[TaskName] [UserID(空白)] [日期(空白)]已完成? [复选框]

  • 然后,当用户点击复选框时:

[TaskName] [UserID] [Date]已完成? [复选框(已禁用)]

我目前有以下代码,我过去几天一直在讨厌,仍然在努力工作。

应用程序/视图/周/ index.html.erb:

<table>
  <thead>    
    <tr>
      <th>Task</th>
      <th>Completed by</th>
      <th>Completed on</th>
      <th>Completed</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <%= form_for(Week.new, remote: true) do |f| %>
        <td><%= f.text_field :task %></td>
        <td><%= f.hidden_field :completed_by, :value => current_user.login %></td>
        <td><%= f.hidden_field :completed_on, :value => DateTime.current().in_time_zone('EST').to_formatted_s(:short) %></td>
        <td><%= f.check_box :completed, :onchange => '$(this.form).submit();' %></td>
      <% end %>
    </tr>
  </tbody>
</table>

应用程序/视图/资产/ Javascript角/ weeks.js.coffee:

$(document).ready ->
$("#new_week").on("ajax:success", (e,data,status,xhr) ->
        $("#new_week").append xhr.responseText
    ).on "ajax:error", (e, xhr, status, error) ->
        $("#new_week").append "<p>ERROR</p>"

应用程序/控制器/ weeks_controller.rb:

class WeeksController < ApplicationController
  before_action :set_week, only: [:show, :edit, :update, :destroy]

  # POST /weeks
  # POST /weeks.json
  def create
    @week = Week.new(week_params)

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

1 个答案:

答案 0 :(得分:0)

嗯,我注意到的一件事是你示例中的周#create动作不处理js请求。

我如何在我的应用程序中为简单的远程表单和js模板执行此操作。

# POST /weeks
# POST /weeks.json
def create
  @week = Week.new(week_params)

  respond_to do |format|
    if @week.save
      format.js
    else
      format.js
    end
  end
end

并使用js模板,例如你的week.js.coffee,但以请求的操作和erb-templates命名。所以我的情况就是create.js.erb / new.js.erb。

但我想的越多。您必须首先明确您确实需要什么。因为一切都可以在后端或前端处理。有几种可能性。