2017-01-20 1 views
0

Hier habe ich ein Projekt, dem ich eine Sitzung hinzufügen und für eine Projektsitzung versuche ich Aufgabe hinzuzufügen. ich bin in der Lage, Projekt zu erstellen und Projektsitzung für Projekt hinzufügen, aber wenn ich versuche, Aufgabe für Sitzung mit Ich erhalte Fehler Couldn't find ProjectSession with 'id'= und 'app/controllers/tasks_controller.rb:60:in set_project_session Ich bin in der Lage, die Projekt Session ID auch project_sessions/11 in der URL, aber wenn ich klicke 'create task' bekomme ich diesen Fehler. Wie kann ich das auflösen?Konnte ProjectSession mit 'id' nicht finden =

hier ist, was ich

ProjectSessionController getan haben:

class ProjectSessionsController < ApplicationController 
    before_action :set_project_session, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user! 
    before_action :set_project 

    def index 
    @project_sessions = ProjectSession.all 
    end 

    def show 
    @project_sessions = ProjectSession.where(project_id: @project.id).order("created_at DESC") 
    end 

    def new 
    @project_session = ProjectSession.new 
    end 

    def edit 
    end 

    def create 
    @project_session = ProjectSession.new(project_session_params) 
    @project_session.project_id = @project.id 

    #respond_to do |format| 
     if @project_session.save 
     redirect_to @project 
     #format.html { redirect_to @project_session, notice: 'Project session was successfully created.' } 
     #format.json { render :show, status: :created, location: @project_session } 
     else 
     format.html { render :new } 
     format.json { render json: @project_session.errors, status: :unprocessable_entity } 
     end 
    #end 
    end 

    def update 
    respond_to do |format| 
     if @project_session.update(project_session_params) 
     format.html { redirect_to @project_session, notice: 'Project session was successfully updated.' } 
     format.json { render :show, status: :ok, location: @project_session } 
     else 
     format.html { render :edit } 
     format.json { render json: @project_session.errors, status: :unprocessable_entity } 
     end 
    end 
    end 


    def destroy 
    @project_session.destroy 
    respond_to do |format| 
     format.html { redirect_to project_sessions_url, notice: 'Project session was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_project_session 
     @project_session = ProjectSession.find(params[:id]) 
    end 

    def set_project 
     @project = Project.find(params[:project_id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def project_session_params 
     params.require(:project_session).permit(:session_date, :session_name, :session_description, :start_time, :end_time) 
    end 
end 

Task-Controller:

class TasksController < ApplicationController 
    before_action :set_task, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user! 
    before_action :set_project_session 

    def index 
    @tasks = Task.all 
    end 

    def show 
    end 

    def new 
    @task = Task.new 
    end 

    def edit 
    end 

    def create 
    @task = Task.new(task_params) 
    @task.session_id = @project_session.id 

    respond_to do |format| 
     if @task.save 
     redirect_to @project_session 
     else 
     format.html { render :new } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    respond_to do |format| 
     if @task.update(task_params) 
     format.html { redirect_to @task, notice: 'Task was successfully updated.' } 
     format.json { render :show, status: :ok, location: @task } 
     else 
     format.html { render :edit } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @task.destroy 
    respond_to do |format| 
     format.html { redirect_to tasks_url, notice: 'Task was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    def set_task 
     @task = Task.find(params[:id]) 
    end 

    def set_project_session 
     @project_session = ProjectSession.find(params[:project_session_id]) 
    end 

    def task_params 
     params.require(:task).permit(:name, :description) 
    end 
end 

Routen:

Rails.application.routes.draw do 
     get 'hr_dashboard/index' 
     resources :roles 
     resources :project_sessions 
     devise_for :users 
     resources :tasks 
     resources :projects do 
     resources :project_sessions, except: [:show, :index] 
     end 
     resources :project_sessions do 

    resources :tasks, except: [:show, :index] 
    end 
    authenticated :user do 
    root 'admindashboard#index', as:"authenticated_root" 
    end 
    root 'welcome#index' 
    get 'userdashboard/index' 
    get 'admindashboard/index' 
    get 'welcome/index' 
end 

Ansicht für die Schaffung neuer Aufgabe

<div class="container"> 
<h1>New Task</h1> 


<%= form_for(@task) do |f| %> 
    <% if @task.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@task.errors.count, "error") %> prohibited this task from being saved:</h2> 

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

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 


<%= link_to 'Back', tasks_path %> 
</div> 
+0

Können Sie Ihre Routen posten –

+0

@ j-dexx Ich habe den Beitrag mit Routen aktualisiert .. –

+0

Ok, so dass Ihre Routen verschachtelt sind, können Sie bitte die Ansicht Code für den Link zur Verfügung stellen. –

Antwort

1

In Ihrer Aktion von Task-Controller zu erstellen, müssen Sie hinzufügen:

@task= @project_session.tasks.build(task_params) 

Denn gerade jetzt, du bist nicht die Aufgabe, zu sagen, aus dem project_session (oder in Bezug auf die bauen project_session) Sie sagen es nur, um eine neue Aufgabe zu erstellen.

@task = Task.new 

Und in der routes.rb Datei, haben Sie darauf vorbereitet durch Verschachtelung, die Ressourcen zu passieren, es sieht so derzeit für die ID eine Aufgabe dass belongs_toproject_session. Kann aber keine finden.

Und auch in Ihrem form_for Elemente, wenn ein ProjectSssion Schaffung haben Sie das Formular wissen lassen, welchen Weg es gehören soll - ich denke, man könnte sagen - da man noch die nicht-verschachtelten Ressourcen zur Verfügung:

resources :tasks 

Wenn project_sessions nicht ohne ein übergeordnetes Element erstellt werden kann, gibt es keine Gründe dafür, das zu behalten. Sie sollten es also einfach entfernen.

Sowieso ist hier, was die form_for aussehen sollte:

<%= form_for([@project_session, @task]) do |f| %> 
+0

Eine Aufgabe gehört zu einer Projektsitzung. Sie haben erklärt, was zu tun ist, wenn Projektsitzungen zu einer Aufgabe gehören. –

+0

Ich aktualisierte meine Antwort für zukünftige Referenz. Danke, dass du darauf hingewiesen hast. – Crashtor

1

ich es herausgefunden!

ich vergessen hatte @project_session in

<%= form_for([@project_session, @task]) do |f| %> 

hinzufügen hinzugefügt genau das und es funktionierte.

Verwandte Themen