Rails-保存记录时自动更新外键

漂亮的

我有两个ActiveRecord模型,AssignmentInstructionAssignment属于Instruction

保存新分配后,我想触发一个回调,该回调基于中的另一个属性在分配中插入外键Assignment换句话说,如果assignment.assignment_type= instruction.name,则将该指令的ID作为主键插入分配中。

似乎您将使用Rails回调。但是我不确定如何在不使模型彼此对话的情况下执行此操作,这是一个坏主意。

编辑1

遵循下面mjnissim的建议,我实现了这一功能,该方法有效:

class Assignment < ActiveRecord::Base
  attr_accessible :game_type, :title, :instruction_id

  belongs_to :instruction

  before_save :set_instruction

  private

  def set_instruction
    instruction = Instruction.where(:name => self.game_type).first
    self.instruction = instruction
  end

end

但是,我很犹豫编写该set_instruction方法,因为我认为在不破坏MVC结构的情况下,模型之间无法相互对话。但这真的可以吗?

姆尼西姆

好漂亮

模型彼此了解或使用回调不是一个坏主意。这是个好主意。

但是,我不完全理解您的问题。每条指令您只有一份作业吗?

无论如何,在此页面上可以找到很多回调,但是我认为您正在寻找的是before_save尝试将其放入Assignment模型中:

before_save do
  if some_condition_is_true
    assign_this = to_that
  end
  true
end

请注意true最后。如果您不返回,true则可以取消某些回调中的保存(请阅读我链接到的文档以找出哪个)。(不用说-您有时可能需要取消保存,因此请正确使用...)

您可能想在回调中使用的另一有用的东西是_changed?title例如,如果您有一个称为的属性,则可以询问以下内容:

if title_changed?
  ... do things...
end

_changed? 是免费提供的,内置于​​Rails中。

如果您需要澄清,请发表评论,我将尝试更新我的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

保存记录时自动更新LastDateModified字段

来自分类Dev

保存记录时在rails中创建唯一ID

来自分类Dev

在Rails模型中发生回滚时如何保存记录

来自分类Dev

在rails中保存记录时出现couter_cache错误

来自分类Dev

保存记录并使用新值时不会在 rails 中更改

来自分类Dev

我无法在sqlite Rails中保存记录

来自分类Dev

Rails循环遍历params数组并保存记录

来自分类Dev

Rails:更新foreign_key时自动更新参考表

来自分类Dev

更新OleDb时未保存记录

来自分类Dev

如何自动更新外键

来自分类Dev

Rails-创建操作不会在数据库中保存记录

来自分类Dev

Rails 4.2外键

来自分类Dev

Rails Devise:更新表单上的嵌套属性时出现“外键设置为零”错误

来自分类Dev

Rails为什么不自动为关联生成外键?

来自分类Dev

保存后,Rails外键始终为空

来自分类Dev

在Rails中使用Postgres UUID时,会损坏Join记录上的创建,保存,更新和销毁

来自分类Dev

Rails无法删除或更新父行:外键约束失败

来自分类Dev

无法删除或更新父行,外键约束使rails失效

来自分类Dev

从Rails关联创建外键

来自分类Dev

Rails中的外键验证

来自分类Dev

在Rails中添加外键

来自分类Dev

Rails:违反外键约束

来自分类Dev

Rails 外键不是 ID

来自分类Dev

Rails无法指定外键

来自分类Dev

Rails与多个外键的关联

来自分类Dev

Rails 外键分配失败

来自分类Dev

Rails与外键之间的关系?

来自分类Dev

Ruby on Rails:更新Rails中的多个记录

来自分类Dev

删除Rails中的标签时无效的外键