【问题标题】:How to use find method for composite primary keys in ruby on rails?如何在 ruby​​ on rails 中使用 find 方法查找复合主键?
【发布时间】:2013-05-01 13:48:57
【问题描述】:

我有一张名为SubElement 的表。

它有两个主键:Element_Code, Sub_Element_Code

在我看来,当我尝试执行以下操作时

<% 
  sub_element_model = Condition::SubElement
  sub_element = @sub_element_code.nil? ? sub_element_model.new : sub_element_model.find(@sub_element_code)
  if sub_element.persisted?
    @element_code = sub_element.Element_Code
    f.object.Sub_Element_Code = @sub_element_code
  end
%>

选择 sub_element_value 后出现错误

["4"]: Incorrect number of primary keys for Condition::SubElement: [:Element_Code, :Sub_Element_Code]

如何对两个复合主键使用 find 方法。

更新:

在表格中,我有element_code field, sub_element_code and material。但是一旦选择了父母,一切都应该可见。在一些 javascript 的帮助下,我尝试完成此操作。我无法详细解释的主要问题是表单字段是由一些帮助文件创建的。这是一个非常大的文件,我无法更改。因此,我正在寻找替代解决方案来更改两个复合主键的查找方法以获取值。

【问题讨论】:

  • 它有两个主键??
  • 是的。它有两个主键Element_Code, Sub_Element_Code
  • 我认为您的意思是具有两个属性的主键 - en.wikipedia.org/wiki/Primary_key
  • @fotanus 问题是我无法改变任何东西。
  • 你能解释一下你在这个视图中试图做什么吗?至少可以说这不是不言自明的......

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

不确定你想用上面的代码做什么,但你可以使用where

sub_element_model.where(first_id: 3, second_id: 5).first

但是,您的代码看起来不是很传统,也许如果您描述了您正在尝试做的事情,那么 SOers 可以帮助您想出一个更简洁的解决方案 :)

【讨论】:

    【解决方案2】:

    我本人从未尝试使用多属性主键,但我相信 ActiveRecord 会告诉您,您在 find 搜索中使用的主键数量不正确。

    试试类似的东西

    Model.find(first_part_of_primary_key, second_part_of_primary_key)
    

    Model.find([first_part_of_primary_key, second_part_of_primary_key])
    

    【讨论】:

    • 这个答案最有效。
    【解决方案3】:

    您不应该使用find(通过主键获取单个记录 - 您不完全拥有),而是使用where(通过您的任何字段获取记录的集合想要):

    sub_element = @sub_element_code ? 
        SubElement.where(sub_element_code: @sub_element_code).first : 
        SubElement.new
    

    【讨论】:

    • 现在,我有未定义的方法持续存在?
    • 可能是因为没有找到带有 sub_element_codeSubElement。它应该通过element_code 字段还是sub_element_code 字段查找?
    • 它应该查找两个字段。 :-(
    • 查找时,element_code应该使用什么变量,sub_element_code应该使用什么变量?
    • 谢谢平尼。我更改了 javascript 以找到 element_code 和 sub_element_code 的变量,并且它现在可以使用您的 where 方法。非常感谢。我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多