我有以下代码:
任务/_form.html.haml
%h3
Tasks
%span.form-inline.centered
= form_for [@activity, @task], remote: true do |f|
= f.text_field :description, {placeholder: 'Enter task description and click + to create a new task', class: 'input-task'}
= f.submit "+", class: 'btn btn-danger'
控制器/tasks_controller.rb
def create
activity = Activity.find(params[:activity_id])
flash[:error] = I18n.t "errors.task.generic" if !activity.add_task!(params[:task])
@task = activity.tasks.last
respond_to do |format|
format.html { redirect_to activity_path(activity) }
format.js
end
end
任务/create.js.erb
$('#incomplete-tasks').append("<%= j render partial: 'task', locals: {task: @task} %>");
任务/_task.html.haml
%li
= task.description
= link_to "Done", activity_task_path(task.activity, task: task), html_options = {method: :put, class: 'pull-right'}
我遇到的问题是,当它尝试使用 js 渲染部分时,我的 restful 资源activity_task_path
发送了一个 get 方法,而不是我指定的 put 方法。如果我不使用 js 渲染它,我只是刷新浏览器,它工作正常。我现在收到路由错误,因为我没有显示页面。然而我不需要一个。我只需要它通过 put 方法更新我的任务。如果有人能解释为什么会发生这种情况,我将不胜感激。
[编辑1]
如果您有任何问题或需要我添加任何代码或我能做的任何其他事情来帮助让我知道。我真的不明白为什么会这样。谢谢你。
[编辑2]
def update
activity = Activity.find(params[:id])
activity.update_task!(params[:task])
redirect_to activity_path(params[:id])
end
这是我的更新控制器。
[编辑3]
您可以在https://trackit.mlpinit.com上在线找到该应用程序,以更好地了解我想要做什么。您可以使用我将确认设置为 2.days 的随机电子邮件地址进行身份验证。
[编辑4]
希望让它更清楚......这是我通过ajax添加新任务时遇到的错误。
路由错误
没有路线匹配
{:action=>"show", :controller=>"tasks", :task=>#<Task id: 64, description: "lalala", complete: false, created_at: "2012-10-11 19:41:22", updated_at: "2012-10-11 19:41:22", activity_id: 6>, :activity_id=>#<Activity id: 6, title: "Lala", description: "this is lala", created_at: "2012-10-10 18:37:18", updated_at: "2012-10-10 18:37:18", user_id: 2, activity_group_id: nil>}
如果我不通过 ajax 调用再次执行此操作,它可以正常工作。我的假设是问题的发生是因为它由于某种原因不理解 put 方法......
[编辑5]
如果我从我的 _task 部分获取链接,则附加会发生而没有任何错误。我想我应该提一下
[编辑6]
我将添加一个视觉演练,以确保我让自己理解......
我有一个任务表:
我输入任务名称
我点击(输入)加号来创建它。
我收到上面也出现的以下错误:
如果我点击刷新,任务生成正常:
这就是为什么我认为它必须在 .js.erb 文件中......