如何在rails上的ruby中使用find方法获取复合主键?

时间:2013-05-01 13:48:58

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

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

3 个答案:

答案 0 :(得分:2)

不完全确定您尝试使用上述代码做什么,但可以使用where

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

你的代码看起来并不常见 - 但是,也许如果你描述了你想要做的事情,那么SOers可以帮助你提出一个更简洁的解决方案:)

答案 1 :(得分:0)

我自己从不尝试使用多属性主键,但我相信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])

答案 2 :(得分:0)

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

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