【问题标题】:Rails Validations presence when relation model is created but not savedRails Validations 在创建关系模型但未保存时存在
【发布时间】:2015-06-12 18:22:27
【问题描述】:

我有两个模型 TaskDependecyTask,它们之间的关系在代码中很清楚。

当我尝试保存 Task 时,DependencyTask 任务属性 的验证task presence: true 给出您可以看到的错误,因为 Task 模型尚未保存。

如何在不删除验证的情况下解决这个问题:task?

型号:

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

发送到服务器的数据:

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"
    ]
}

所有有帮助的 cmets 都会非常感激。

【问题讨论】:

  • 你在使用观察者吗?
  • 我不知道这是什么

标签: ruby-on-rails


【解决方案1】:

我使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多