Rails:获取一个模型来命名自己

时间:2015-03-30 13:34:59

标签: ruby-on-rails-4 activerecord

我有三个型号,housesusers& rooms

房间是一个非常无聊的模型,它主要用于指定用户在房屋内占用的房间。除了协会,它只有一个记录,名称。名称是用户可以设置的无聊指定,例如。 “时髦闻起来的阁楼房间”或只是无聊的旧“房间1”。

如果用户没有归档名称(如果房间没有任何占用者可以让我做一些更智能的自动命名),我希望模型能够为自己命名。

具体来说,只要用户在没有属性的情况下调用Room.new(),我就希望它:Room #{i}(例如房间1,房间320,房间12321)。

我遇到麻烦的是如何使i连接到相关的房子。所以可能会有许多人被称为“房间1”,但他们都必须在不同的房子里,在每个房子内Room #{i}需要一个独特的名字......

我知道要通过验证(唯一性)来完成其中的一部分,但是如何...以及在哪里,我会将一个枚举器用于计算已经存在于房屋中的房间数量,并且当它出现时{I} i += 1周围命名任何新的添加?

1 个答案:

答案 0 :(得分:1)

一个选项是在Room模型中创建一个after_create回调:

class Room < ActiveRecord::Base
  belongs_to :house
  after_create :name_room

  def name_room
    if name.blank?
      update_column(:name, default_name)
    end
  end

  def default_name
    "Room #{rooms_in_house} of house #{self.house.id}"
  end

  def rooms_in_house
    self.house.rooms.count
  end
end

希望我理解你的问题并给你一些有用的东西......但看起来你甚至不必使用可枚举的count块!

如果房间数量不正确,您只需在方法中添加1即可在rooms_in_house中进行调整。