私は次のことを定義しました:
task.rb
:
class Task < ActiveRecord::Base
belongs_to :worker
attr_accessible :done, :name
end
worker.rb
:
class Worker < ActiveRecord::Base
has_many :tasks
attr_accessible :name
end
次のコードを「views/workers/index.html.erb」に記述しました。
<h1>Listing workers</h1>
<table>
<tr>
<th>Name</th>
<th>Task</th>
<th>Done</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @workers.group_by(&:name).each do |name, tasks| %>
<tr>
<td><%= name %></td>
<td><%= tasks.size %></td>
<td><%= tasks.select{ |task| task.done != 'yes' }.size %></td>
<td><%= link_to 'new Task', new_worker_task_path(name) %></td>
<td><%= link_to 'Show Tasks', worker_tasks_path(name) %></td>
</tr>
<% end %>
</table>
次のリンクを使用するには:new_worker_task_path、
task_controllerで定義しました:
def new
@worker = Worker.find(params[:worker_id])
@task = @worker.tasks.new
respond_with(@worker)
end
さらに、ビュー/タスクでnew.html.erbを定義しました。これには、「こんにちは」も含まれています。
「新しいタスク」のリンクを押すと、次のようになりました。
Couldn't find Worker with id=alon
Rails.root: /home/alon/projects/TODO
Application Trace | Framework Trace | Full Trace
app/controllers/tasks_controller.rb:48:in `new'
Request
Parameters:
{"worker_id"=>"alon"}
最初の質問:タスクを追加したいワーカーを見つけるにはどうすればよいですか?
2番目の質問:私が言ったように、私は定義しました:
<td><%= link_to 'new Task', new_worker_task_path(name) %></td>
なぜ名前を送信する必要があるのですか?この値を使用しますか?このパラメータが必要な理由がよくわかりません。