2

私は次のことを定義しました:

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>

なぜ名前を送信する必要があるのですか?この値を使用しますか?このパラメータが必要な理由がよくわかりません。

4

1 に答える 1

1

実際の:param_keyを送信する必要があります。デフォルトではIDです。

それで、

new_worker_task_path()

# have to receive worker's ID as argument. Or worker object, accepted too...

new_worker_task_path(@worker)

最初の質問のために更新されました:あなたが欲しいものを推測させてください。

<% @workers.group_by(&:name).each do |name, workers| %>
  <tr>
    <td><%= name %></td>
    <td><%= workers.map {|w| w.tasks.size}.sum %></td>
    <td><%= workers.map {|w| w.tasks.select{ |task| task.done != 'yes' }.size}.sum %></td>
    <td>
      <% workers.each do |worker| %>
        <%= link_to 'new Task', new_worker_task_path(worker) %>
      <% end %>
    </td>
    <td>
      <% workers.each do |worker| %>
        <%= link_to 'Show Tasks', worker_tasks_path(worker) %>
      <% end %>
    </td>
  </tr>
<% end %>
于 2012-12-24T02:02:54.587 に答える