我有一张名为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方法以获取值。
答案 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