我有一個項目模型和一個任務模型,但是一個任務可以有很多項目,反之亦然...所以我創建了兩者之間的關係模型。現在從項目配置文件中,我希望能夠創建任務並自動創建任務和新任務與創建它的項目之間的關係。TasksController中的NoMethodError創建項目時創建新任務
但是當我試圖做到這一點我收到以下錯誤:
NoMethodError in TasksController#create
undefined method `related?' for nil:NilClass
我的任務控制器
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
我TaskRelationship型號:
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
我的任務模型:
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
末 項目型號:
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
我不知道我要去哪裏錯了... THX,
UPDATE:
我已經添加了以下行作爲marsAtomic指出的創建方法的頂部丟失...
@project = Project.find(params[:id])
我只是誤解'current_user.own_tasks.build'中什麼'own_tasks'? – 7urkm3n
啊...我基本上在用戶模型has_many:own_projects,:class_name =>'Project',也是 has_many:own_tasks,:class_name =>'Task'(這是關聯任務或項目與'所有者') – BB500
你可以只是'current_user.tasks.build(task_params)' – 7urkm3n