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
答案 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。
但我想的越多。您必须首先明确您确实需要什么。因为一切都可以在后端或前端处理。有几种可能性。