更改另一个表的属性

时间:2012-08-21 20:10:23

标签: ruby-on-rails-3 model

我有“工具”和“借”表。

我正在使用Rails3,当我创建一个借出时,我希望它将该工具的属性状态更改为“U”。

这可能吗?

我试过模型借出

 after_save :change_status

  def change_status
      tools.update_attribute(status, 'U')
  end

我也试过,在同一型号上:

 after_save :change_status

  def change_status
      self.tool.update_attribute(status, 'U')
  end

调试日志没有成功或警告。

建议吗?

谢谢! :)

2 个答案:

答案 0 :(得分:0)

首先,我假设您的Lend模型has_many:tools

为了能够执行tool.update_attribute之类的操作,您需要使用accepts_nested_attributes_for

看看这些链接,它们可能会让你走上正确的道路:
RailsCasts #196 Nested Model Form Part 1
Active Record Nested Attributes

希望这有帮助。

答案 1 :(得分:0)

借出和工具之间有什么关系?如果Lend has_many工具,你将不得不做这样的事情:

def change_status
  tools.each { |tool| tool.update_attributes(status: 'U') }
end

另请注意,我使用的是update_attributes,因为很快就会弃用update_attribute(singular)。

顺便说一句,你应该在Tool中创建一个方法来更新属性,Lend模型不应该知道如何将工具设置为借用。像

这样的东西
def loaned!
  update_attributes status: 'U'
end