2015-06-12 74 views
0

時,我有兩個型號任務DependecyTask,他們有他們之間的關係上的代碼好清楚。Rails的驗證,就會建立關係模型,但不保存

當我嘗試保存任務,驗證任務存在:真DependencyTask任務的屬性給,你可以看到錯誤,因爲任務模型尚未保存。

我怎樣才能解決這個問題,沒有刪除驗證:任務?

型號:

class DependencyTask < ActiveRecord::Base 
    belongs_to :task 
    belongs_to :before, :class_name => "Task" 

    validates :before, presence: true 
    validates :task, presence: true 
    validates :before_id, uniqueness: {scope: :task_id, 
    message: "No puede ser la misma tarea dependiente de si misma"} 

end 

class Task < ActiveRecord::Base 
    has_many :assignment_tasks, dependent: :destroy 
    has_many :users, through: :assignment_tasks 

    has_many :dependency_tasks, dependent: :destroy 
    has_many :befores, :through => :dependency_tasks 
    has_many :inverse_dependency_tasks, :class_name => "DependencyTask", :foreign_key => "before_id", dependent: :destroy 
    has_many :inverse_befores, :through => :inverse_dependency_tasks, :source => :task 

    accepts_nested_attributes_for :dependency_tasks 

end 

控制器:

class TasksController < ApplicationController 

def create 
    @task = @project.tasks.create(params[:task].permit(:name, :length, :start_date, :end_date, :milestone_id, :description, {before_ids: []}, {user_ids: []}, :form => [])) 
    respond_to do |format| 
     if @task.save   
     format.html { redirect_to project_path(@project) } 
     format.json { redirect_to 'edit', status: :created, location: @task } 
     else 
     format.html { render action: 'index' } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
end 

數據sended到服務器:

Processing by TasksController#create as HTML 
    Parameters: {"utf8"=>"âœ「", "authenticity_token"=>"fYRkppGw8ekRS3aBMwKSw8IU+8ayBdUKDw20/QT0r/g=", "task"=>{"name"=>"Architecture building and Cost estimate", "length"=>"20", "start_date"=>"16/01/2015", "end_date"=>"30/01/2015", "description"=>"", "milestone_id"=>"", "before_ids"=>["", "6"]}, "commit"=>"Crear Tarea", "locale"=>"es", "project_id"=>"8"} 

錯誤:

["Dependency tasks task Can't be blank"] 
{ 
    :"dependency_tasks.task" => [ 
     [0] "Can't be blank" 
    ] 
} 

所有有用的評論將真正apreciated。

+0

您使用的觀察員? –

+0

我不知道這是什麼 – ppascualv

回答

0

我解決使用inverse_of方法

型號這個問題:

class DependencyTask < ActiveRecord::Base 
    belongs_to :task, inverse_of: :dependency_tasks 
    belongs_to :before, :class_name => "Task", inverse_of: :dependency_tasks 

end 



class Task < ActiveRecord::Base 

    has_many :dependency_tasks, dependent: :destroy, inverse_of: :task 
    has_many :befores, :through => :dependency_tasks, inverse_of: :dependency_tasks 
    has_many :inverse_dependency_tasks, :class_name => "DependencyTask", :foreign_key => "before_id", dependent: :destroy, inverse_of: :task 
    has_many :inverse_befores, :through => :inverse_dependency_tasks, :source => :task, inverse_of: :inverse_dependency_tasks 
end