因此,我对 Ruby on Rails 比较陌生,并且正在使用该语言构建一个项目管理系统,以便在我的大学进行独立研究。到目前为止,我已经创建了:
- 一个用户可以创建多个项目的区域(http://i.imgur.com/pXOBg.png)
- 在每个项目中,用户可以创建多个待办事项列表(http://i.imgur.com/FT3no.png)
- 在每个待办事项列表中,用户可以创建多个可以标记为完成/未完成的任务 (http://i.imgur.com/DMdcN.png)
一切都通过 SQLite DB 中的外键关联,并且工作相对良好,除了当我添加任务时。尽管该任务确实被添加到了待办事项列表中,但我被重定向到了一个不正确的 URL。我创建了与我的项目管理系统分开的待办事项列表应用程序,只是为了看看我如何创建它以及重定向以及一切工作正常,但将它实施到我的项目中证明有些麻烦。
这是遇到的问题:http: //i.imgur.com/Axuf2.jpg。URL 中的链接应该是http://localhost:3000/projects/2/lists/15,所以 ID 混淆了。显示的是http://localhost:3000/projects/15/lists/14其中 15 是列表的 ID,而不是项目,14 是任务的 ID,而不是列表。
我相信问题出在我的tasks_controller.rb中,其中包含以下内容:
class TasksController < ApplicationController
attr_accessor :completed
before_filter :find_list
respond_to :html, :xml, :js
def create
@task = @list.tasks.new(params[:task])
if @task.save
flash[:notice] = "Task saved"
redirect_to project_list_url(@list)
else
flash[:error] = "Task could not be saved"
redirect_to project_list_url(@list)
end
end
def complete
@task = @list.tasks.find(params[:id])
@task.completed = true
@task.save
redirect_to project_list_url(@list)
end
def incomplete
@task = @list.tasks.find(params[:id])
@task.completed = false
@task.save
redirect_to project_list_url(@list)
end
def destroy
@task = @list.tasks.find(params[:id])
if @task.destroy
flash[:notice] = "Task deleted"
redirect_to project_list_url
else
flash[:error] = "Could not delete task"
redirect_to project_list_url
end
end
private
def find_list
@list = List.find(params[:list_id])
end
end
我认为问题出现在以下方面$link redirect_to project_list_url(@list)
,因为我认为它应该是$link redirect_to project_list_url(@project, @list)
。但每次我添加:
@project = Project.find(params[:project_id])
对于我的代码,待办事项不会从已完成变为未完成,反之亦然。
这是我的待办事项列表视图中的代码:
<h3>Stuff to do</h3>
<ul>
<% @list.tasks.incomplete.each do |task| %>
<li><%= task.description %> <%= button_to "Complete", complete_task_path(@list.id,task.id) %></li>
<% end %>
</ul>
<h3>Stuff I've Done</h3>
<ul>
<% @list.tasks.completed.each do |task| %>
<strike><li><%= task.description %></strike> <%= button_to "Incomplete", incomplete_task_path(@list.id,task.id) %></li>
<% end %>
</ul>
<hr />
<%= form_for [@project, @list, @task] do |form| %>
<p><%= form.text_field :description %> <%= form.submit %></p>
最后,快速浏览一下我的routes.rb:
root :to => 'home#index'
devise_for :users
resources :projects do
resources :messages
resources :lists do
resources :tasks
end
end
match 'lists/:list_id/tasks/:id/complete' => 'tasks#complete', :as => :complete_task
match 'lists/:list_id/tasks/:id/incomplete' => 'tasks#incomplete', :as => :incomplete_task
因此,ID 在 URL 中混合在一起,每当我编辑列表时它们也会这样做(尽管我想如果我可以为我可以为所有事情修复它的任务修复它)。
非常感谢任何看到这个并为我提供帮助的人,我非常感谢你所有的时间。如果您需要查看任何其他控制器、模型或视图(项目、列表、任务)或我项目中的任何内容,我将非常乐意分享。