2

我有一张桌子叫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 的帮助下,我尝试完成此操作。我无法详细解释的主要问题是表单字段是由一些帮助文件创建的。这是一个非常大的文件,我无法更改。所以我正在寻找替代解决方案来更改两个复合主键的查找方法以获取值。

4

3 回答 3

2

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

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

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

于 2013-05-01T13:55:27.813 回答
1

我自己从未尝试使用多属性主键,但我相信 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])
于 2013-05-01T14:02:12.477 回答
0

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

sub_element = @sub_element_code ? 
    SubElement.where(sub_element_code: @sub_element_code).first : 
    SubElement.new
于 2013-05-01T14:13:20.457 回答