そのため、私は Ruby on Rails には比較的慣れておらず、この言語を使用して大学での独立した研究のためにプロジェクト管理システムを構築しています。これまでに作成したもの:
- ユーザーが複数のプロジェクトを作成できるエリア (http://i.imgur.com/pXOBg.png)
- 各プロジェクトで、ユーザーは複数の To Do リストを作成できます ( http://i.imgur.com/FT3no.png )
- 各 To Do リスト内で、ユーザーは完了/未完了としてマークできる複数のタスクを作成できます (http://i.imgur.com/DMdcN.png)
すべてが SQLite DB の外部キーを介して関連付けられており、タスクを追加する場合を除いて、比較的正常に動作しています。タスクはto-do リストに追加されますが、間違った URL にリダイレクトされます。プロジェクト管理システムとは別に To Do リスト アプリを作成し、それを作成する方法とリダイレクト、およびすべてが正常に機能することを確認しましたが、それをプロジェクトに実装するのはやや面倒でした。
発生している問題は次のとおりです: 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])
私のコードでは、to-do タスクは完了から未完了に、またはその逆に移動しません。
これが私のto-doリストビューのコードです:
<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 で混同されており、リストを編集するときはいつでもこれを行います (ただし、すべてのタスクで修正できるかどうかはわかりましたが)。
これを見て、私に助けを提供してくれた人に感謝します。あなたのすべての時間を本当に感謝しています。他のコントローラー、モデル、ビュー (プロジェクト、リスト、タスク)、または私のプロジェクトの何かを見る必要がある場合は、喜んで共有します。