2012-05-05 2 views
0

私は単純なレール3 todoアプリケーションに取り組んでいます。私は完了したタスクと完了したタスクでアプリケーションをフィルタリングしようとしていますが、スコープを呼び出すときはいつでもエラーメッセージが表示されます。Rails 3タスクスコープ?

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

task.rb

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

<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 index.html.erb

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

routes.rbを

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

レールがこのエラーを表示する理由は何ですか?

+0

'@ tasks 'はどこに定義されていますか?私は '@タスク'を見るが '@タスク'は見ない。 –

+0

@muistooshortタスクをタスクに置き換えるべきですか? – Yooku

+0

'@ tasks'はどこかで定義されているか、' Nil:NilClass'の 'NoMethodError:未定義メソッド 'each'を取得しています。あなたが期待しているActiveRecord :: Relationではなく、配列として '@ tasks'を作成しています。 –

答えて

0

あなたのビュー(index.html.erb)を見るだけで、ある場所であなたは関係として扱われています。

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

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

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

あなたが2番目のインスタンスでエラーが表示されているので、あなたがのように「完了」にアクセスする必要があります。

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

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