Ich habe ein Projektmodell und ein Aufgabenmodell, aber eine Aufgabe kann viele Projekte haben und umgekehrt ... also habe ich ein Beziehungsmodell zwischen den beiden erstellt. Jetzt aus dem Projektprofil, ich möchte in der Lage sein, eine Aufgabe zu erstellen und automatisch erstellen die Aufgabe und die Beziehung zwischen der neuen Aufgabe und dem Projekt, aus dem es erstellt wurde.NoMethodError in TasksController # erstellen beim Erstellen neuer Aufgabe aus Projekt
aber wenn ich versuche, dies zu tun Ich bin die folgende Störung zu erhalten:
NoMethodError in TasksController#create
undefined method `related?' for nil:NilClass
Meine Aufgaben-Controller
class TasksController < ApplicationController
def new
@task = Task.new
end
def create
@task = current_user.own_tasks.build(task_params)
if @task.save
flash[:success] = "Your task has been created."
redirect_to @task
@project.relate!(@task) unless @project.related?(@task) # establishes task relationship w/ project only if relationship doesn't already exist
else
render 'task'
end
end
private
def task_params
params.require(:task).permit(:title, :description, :user_id, taskrelationship_attributes: [:taskproject_id, :projecttask_id])
end
end
Mein TaskRelationship Modell:
class TaskRelationship < ActiveRecord::Base
belongs_to :taskproject, class_name: "Project"
belongs_to :projecttask, class_name: "Task"
validates :taskproject_id, presence: true
validates :projecttask_id, presence: true
end
Meine Aufgabe Modell:
class Task < ActiveRecord::Base
belongs_to :owner, :foreign_key=>'user_id', :class_name=>'User'
has_many :reverse_taskrelationships, foreign_key: "projecttask_id",
class_name: "TaskRelationship",
dependent: :destroy
has_many :taskprojects, through: :reverse_taskrelationships, source: :taskproject
validates :title, presence: true
validates :description, presence: true, length: { maximum: 140 }
end
Ende Projektmodell:
class Project < ActiveRecord::Base
belongs_to :owner, :foreign_key=>'user_id', :class_name=>'User'
has_many :tasks
has_many :taskrelationships, foreign_key: "taskproject_id", dependent: :destroy
has_many :projecttasks, through: :taskrelationships, source: :projecttask
validates :title, presence: true
validates :background, presence: true
def related?(some_task)
taskrelationships.find_by_projecttask_id(some_task.id)
end
def relate!(some_task)
self.taskrelationships.create!(projecttask_id: some_task.id)
end
end
Ich bin nicht sicher, wo ich falsch gehe ... thx,
UPDATE:
ich die folgende Zeile hinzugefügt haben bei der Anfang der create -Methode, wie marsAtomic darauf hingewiesen wurde, fehlte ...
@project = Project.find(params[:id])
Ich missverstehe nur was "eigene_Tasks" in 'current_user.own_tasks.build'? – 7urkm3n
ah ... ich habe im Grunde im Benutzermodell has_many: own_projects,: class_name => 'Project' und auch has_many: own_tasks,: class_name => 'Aufgabe' (dies ist die Aufgabe oder das Projekt mit einem ' Besitzer ') – BB500
könnten Sie einfach 'current_user.tasks.build (task_params)' – 7urkm3n