【问题标题】:Rails-Passing an object to a DB methodRails - 将对象传递给 DB 方法
【发布时间】:2015-07-15 15:26:28
【问题描述】:

我想知道在 Rails 中是否可以执行以下操作。我对 Rails 很陌生,但这似乎是我希望 Rails 能够实现的那种类型......

我想知道一个 DB 方法(例如,find)是否可以获取一个对象并自动知道在适当的外键列中查找其 ID 值,而无需给出其名称那一栏。

我的具体用例是我想创建一个 通用 方法来检查两个模型是否通过连接表关联。

(换句话说,不同的表将链接不同的模型,因此将使用不同的列名。我希望能够传入一些东西[可能是相关类的对象],Rails 会知道id应在sample_model_id 列中搜索@sample_modelSampleModel 类。)

所以方法应该是这样的:

def connected? (connection_table, model1, model2)
    connection_table.class.find_by(model1, model2)
end 

…并且该方法可以自动知道它正在查找 model1_id 列中的 model1.id 和 model2_id 列中的 model2.id。

这(或类似的)可能吗?如果没有,有没有其他方法可以实现我的目标(通用连接检查器方法)?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    此方法应按预期工作:

    def self.find_by(obj1, obj2)
      fk_1, fk_2 =
        [obj1, obj2].map { |o| self.reflect_on_association(o.class.to_s.split("::").last.underscore.to_sym).foreign_key }
      self.where(fk_1 => obj1, fk_2 => obj2).last
    end
    

    【讨论】:

    • 我不明白你在这里写的所有内容,但看起来这假设它知道fk_1fk_2 的名称...?我正在尝试创建一个通用方法,可用于具有不同列名的不同对象/表......(我认为我的 Q 中并不清楚,虽然 - 将编辑)
    • 在这段代码中,我显然对belongs_to 格式做了假设。如果不想这样做,可以使用self.reflect_on_all_associations(:belongs_to) 方法检索所有的belongs_to 关联并保留您感兴趣的关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2011-09-27
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多