0

単純なRails3ToDoアプリケーションに取り組んでおり、完了したタスクと完了していないタスクでアプリをフィルタリングしようとしていますが、スコープを呼び出そうとするとエラーメッセージが表示されます。

undefined method `completed' for #<Array:0x007fe8420d0e58>

task.rb

scope :completed , where(:completed => true)
scope :incomplete , where(:finished => false)

index.html.erb

<table>
  <tr>
    <th>Name</th>
    <th>Description</th>
    <th>Finished</th>
    <th>User</th>
  </tr>
  <% @tasks.each do |task| %>
  <tr>
    <td><%= task.name %><%= button_to "complete", complete_task_path(task.id)%></td>
    <td><%= task.description %></td>
    <td><%= task.finished %></td>
    <td><%= task.user_id %></td>
    <td><%= link_to 'Show', task %></td>
    <td><%= link_to 'Edit', edit_task_path(task) %></td>
    <td><%= link_to 'Destroy', task, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
<% end %>
</table>

<%= content_tag :h2, "Stuff Ive done" %>
<table>
  <tr>
    <th>Name</th>
  </tr>
  <% @tasks.completed.each do |task| %>
  <tr>
    <td><%= task.name %></td>
  </tr>
<% end %>
</table>

task_controller.rb

def complete
 @task = Task.find(params[:task_id])
 @task.completed = true
 @task.save
 redirect_to task_path
end

ルート.rb

match "tasks/:id/complete" => "task#complete", :as => :complete_task

レールが私にこのエラーを与える理由は何ですか?

4

1 に答える 1

0

ビュー (index.html.erb) を見るだけで、1 つの場所で、関係として扱っています。

<% @tasks.each do |task| %>

コードの後半で、単一のオブジェクトとしてアクセスしようとしています。

<% @tasks.completed.each do |task| %>

2 番目のインスタンスでエラーが発生しているため、次のように「完了」にアクセスする必要があります。

<% @tasks.completed.each do |task| %>
  <% completed = task.completed %>
     <% completed.each do |com| %>

これは理にかなっていますか?

于 2012-05-05T05:20:41.327 に答える