ruby-on-rails - rails : How to make available parent attribute in setter method

标签 ruby-on-rails nested-attributes getter-setter virtual-attribute

上下文:

我有一个 company许多模型projects , 有很多 tasks . company还有很多employees ,这又有很多tasks .

架构:

enter image description here

问题:

我正在构建一个表单来创建一个项目,用户可以在其中添加多个 tasks .提交后,表单应创建一个 project记录,一个或多个task记录 hoursemployee_id属性和 (!) 检查是否 employee名称已存在于数据库中或创建一个新名称。

我通过添加 jquery autocomplete 来解决这个问题到表单并使用 getter 定义虚拟属性和 setter我的任务模型中的方法。类似于 Railscast #102 .

这成功设置了 employee_idtasks并创建一个新的 employee与员工记录nametask_id .

目前的问题是模型没有保存 company_id .

我的代码:

class Task < ActiveRecord::Base
    belongs_to :project
    belongs_to :employee

    def employee_name
      employee.try(:name)
    end

    def employee_name=(name)
      self.employee = Employee.find_or_create_by(name: name) if name.present?
    end
end

问题:

如何制作 company_id父模型的属性可用我的 setter 方法 Task模型?像这样:

def shareholder_name=(name)
    self.shareholder = Shareholder.find_or_create_by(name: name, company_id: company_id) if name.present?
end

目前这会产生错误:

undefined local variable or method "company_id" for #<Task:0x98438b8>

编辑:

或者,如果我尝试 project.company_id这告诉我project是一个 NilClass:

undefined method company_id for nil:NilClass

更新:

仍未解决。任何想法为什么 projectnil在这里?

最佳答案

class Task < ActiveRecord::Base
  belongs_to :project
  belongs_to :employee

  def shareholder_name=(name)
    self.shareholder = Shareholder.find_or_create_by(name: name, company_id: project.company_id) if name.present?
  end
end 

还有,rails 的典型模式,例如你有 belongs_to :project,这会添加一个名为 project 的实例方法到 Task,然后可以使用该实例方法获取与任务关联的项目,然后获取关联的 company_id,以备不时之需

关于ruby-on-rails - rails : How to make available parent attribute in setter method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494349/

相关文章:

ruby-on-rails - fields_for 嵌套资源的 Rails 4 Controller 操作

ruby-on-rails - 如何在嵌套属性中使用条件验证 validate_presence_of ?

java - 访问器方法的使用

Java:如何使私有(private)字段Map在类中不可变?

C# getter 和 setter 简写

ruby-on-rails - Gem 文件请求从 Rails 4 升级到 Rails 5 时安装的依赖项,但它说找不到兼容的版本

ruby-on-rails - Controller helper_method

ruby-on-rails - 如何在Rails迁移中将一列(包含内容)移动到另一个表?

ruby-on-rails-4 - 多级accepts_nested_attributes_for时的Rails 4强参数

ruby-on-rails - Rails 访问模型中关联对象的方法?