2016-07-08 15 views
0

私は2つのモデル、すなわちtodoとtasksを持っています。 Has_manyを設定して、それらの間の協調を行います(todoには多くのタスクがあり、タスクはtodoに属します)。ネストされたリソースの行

<%= form_for([@todo, @task], html:{class:'form-horizontal'}) do |f| %> 
    <% if @task.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@task.errors.count, "error") %> prohibited this todo from being saved:</h2> 

     <ul> 
     <% @task.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
      $('#datep').on('change', function() { 
      $('.datepicker').hide(); 
     }); 

    }); 
    </script> 

    <div class="container"> 
     <table style="width:70%" class="table"> 
     <tr> 
      <td><%= f.label :title , "Task Title"%> 
      <%= f.text_field :title,:class=>'form-control input-sm' %></td> 
     </tr> 

     <tr> 
      <td><%= f.label :description,"Task Description"%> 
      <%= f.text_field :description,:class=>'form-control input-sm' %></td> 
     </tr> 

     <tr> 
      <td><%= f.label :deadline,"Task DeadLine"%> 
      <h id="datep"><%= f.text_field :deadline, :class=>'form-control input-sm', "data-provide" => "datepicker" ,"data-date-format" => "mm-dd-yyyy"%></h></td> 
     </tr> 

     <tr> 
      <td><%= f.label :assignee,"Task Assignee" %><br/> 
      <%= f.collection_select :assignee, User.all, :name, :name, {}, :class => "btn btn-default dropdown-toggle"%></td> 
     </tr> 

     <tr> 
      <td><%= f.label :tags,"Tags for Task"%> 
      <%= f.text_field :tags,:class=>'form-control input-sm' %></td> 
     </tr> 

     <tr> 
      <td><%= f.label :state,"Task Status"%><br/> 
      <%= f.select :state, ['Yet To Start', 'In Progress', 'Finished'], {}, :class => "btn btn-default dropdown-toggle"%></td> 
     </tr> 

    </table> 
    </div> 

    <br /> 
    <div class="actions form-group"> 
    <div class="container"> 
    <%= f.submit 'Create New Task', class:'btn btn-success'%> 
    &nbsp;&nbsp; 
    <%= link_to todos_path, class: 'btn btn-warning' do %> 
     <i class="glyphicon glyphicon-hand-left"></i> Back To List 
    <% end %> 
    </div> 

    </div> 
    <% end %> 

マイタスクコントローラのコードは次のとおりです。

私は私のルートは

resources :todos do 
    resources :tasks 
    end 

ファイル新しいタスクを作成するための私のフォームを以下に示しますように、以下に示すように、それらの間のネストされたリソースを設定しています以下に示す:

class TasksController < ApplicationController 

    def new 
    @task = Task.new 
    end 

    def create 
    @todo = Todo.find.(params[:todo_id]) 
    @task = @todo.tasks.build(task_params) 
    if @task.save 
     redirect_to [@todo, @task] 
    else 
     redirect_to root_path 
    end 
    end 

private 

    def set_todo 
    @todo = Todo.find(params[:todo_id]) 
    end 

    def task_params 
    params.require(:task).permit(:assignee, :deadline, :state, :tags, :title, :description) 
    end 

end 

しかし、私は、特定のToDo私に新しいタスクを追加したいときこのエラーが発生する

undefined method `tasks_path' for #<#<Class:0x007fd16a9c8810>:0x007fd169c95a80> 
Did you mean? asset_path 

ここで私は間違って何をしているのか分かりませんか?

答えて

0

redirect_toはハッシュ、レコードまたは文字列しか受け付けないので、この行redirect_to [@todo, @task]は機能しません。 http://api.rubyonrails.org/classes/ActionController/Redirecting.htmlを参照してください。ここでは妥当なredirect_to todo_tasks_path(@todo)に変更することができます。

コントローラにbefore_filter :set_todoを入れていないことに気付きました。 createのアクションで@todo = Todo.find.(params[:todo_id])を削除することができます。

希望します。

+0

ボタンをクリックして新しいタスクを作成すると、フォームが最初に表示されません。代わりにエラーが表示されます。だから、私はそこに何かhtml形式で間違っていると思っている – AKKI

+0

それは本当に魅力のように働いた、ありがとうたくさんの仲間 – AKKI

関連する問題