重用多个模型的方法

时间:2013-04-29 21:23:27

标签: ruby-on-rails shared-libraries

您如何实现基于请求模型搜索表​​的方法?

我有一个User和Vehicle表,它们都分配了存储在Equipment表中的设备。 我正在尝试使用相同的方法显示分配给用户和车辆的设备。 Equipment表有一个user_id和vehicle_id,显示设备的分配位置。

是否有任何方法可以传入表变量(可以是用户或车辆),然后将该variable_id:作为搜索条件,以显示分配给用户或车辆的设备,具体取决于哪个显示页面是被人看待 -

def equip(table, id)
  equip = Equipment.where(table_id: id)
end

这样传入的表变量替换了where()方法的“table”片段,使其成为user_id或vehicle_id?

2 个答案:

答案 0 :(得分:1)

正如Mr.Yoshiji所说,这是可能的,但我强烈建议改为polymorphic associations

答案 1 :(得分:0)

是的,有可能:

def equip(table, id)
  equip = Equipment.where("#{table}_id = ?", id)
end

但这可能导致错误很快,在之前添加一些检查内容:

def equip(table, id)
  if self.columns.map(&:name).include?("#{table}_id")
    equip = Equipment.where("#{table}_id = ?", id)
  else
    # the columns does not exists!
  end
end

说明:

self.columns.map(&:name) # returns the name of all the columns of the model in a array

我的Rails控制台的一个例子:

User.columns.map(&:name)
=> ["id", "username", "profession_id", "external_reference", "authorisation_group", "created_at", "updated_at", "active", "license", "visible"]