Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails HABTM双嵌套字段_Ruby On Rails_Has And Belongs To Many_Nested Attributes - Fatal编程技术网

Ruby on rails HABTM双嵌套字段

Ruby on rails HABTM双嵌套字段,ruby-on-rails,has-and-belongs-to-many,nested-attributes,Ruby On Rails,Has And Belongs To Many,Nested Attributes,我无法使用的有趣代码段。我有以下模型/关系(不包括不必要的代码) html看起来很干净: <input id="service_request_services_attributes_0_cats_uid_fk" name="service_request[services_attributes][0][cats_uid_fk]" type="hidden" value="1" /> <input id="service_request_services_attribute

我无法使用的有趣代码段。我有以下模型/关系(不包括不必要的代码)

html看起来很干净:

<input id="service_request_services_attributes_0_cats_uid_fk" name="service_request[services_attributes][0][cats_uid_fk]" type="hidden" value="1" />
  <input id="service_request_services_attributes_0_types_uid_fk" name="service_request[services_attributes][0][types_uid_fk]" type="hidden" value="1" />
  <input id="service_request_services_attributes_0_service_subtypes_attributes_0_id" name="service_request[services_attributes][0][service_subtypes_attributes][0][id]" type="hidden" value="2" />
   <input id="service_request_services_attributes_0_service_subtypes_attributes_0_id" name="service_request[services_attributes][0][service_subtypes_attributes][0][id]" type="hidden" value="2" />
  <input id="service_request_services_attributes_0_service_subtypes_attributes_1_id" name="service_request[services_attributes][0][service_subtypes_attributes][1][id]" type="hidden" value="4" />
   <input id="service_request_services_attributes_0_service_subtypes_attributes_1_id" name="service_request[services_attributes][0][service_subtypes_attributes][1][id]" type="hidden" value="4" />

我返回了“未定义方法'service#u subtype'for#”错误,唯一未更新的表是HABTM模型之间的联接表。你知道如何解决这个问题,或者幕后发生了什么吗?我不确定我是否理解这个过程背后发生的“魔力”,看到它起作用。似乎大多数人都说HABTM不适用于嵌套属性。似乎是这样。解决方法?

假设这不是服务模型中的复制粘贴错误,它可能是问题的根源

 accepts_nested_attributes_for :services_subtypes
应该是

 accepts_nested_attributes_for :service_subtypes
接受\u嵌套的\u属性\u的第一个参数应该是一个由has\u many、has\u和\u-beliens\u-to\u many或beliens\u-to语句定义的关联

关于双重生成隐藏字段的第二个小问题是将其插入到部分的字段_中。字段\自动包含id的隐藏字段。可以安全地从以下块中删除隐藏字段行

<% fields.fields_for :service_subtypes do |subtype| %>
  <%= subtype.hidden_field :id %>
<% end %> 

在我的邮件中发现了该错误。 在任何情况下,子类型的字段_仍然没有为嵌套属性的魔力生成正确的参数,以了解我试图做的事情

我最终得到的是:

新建.erb

<% form.fields_for :services do |fields| %>
    <%= fields.hidden_field :wsi_web_serv_cats_uid_fk %>
    <%= fields.hidden_field :wsi_web_serv_types_uid_fk %>
    <%= fields.hidden_field :service_subs_hash %>
<% end %>
def service_subs_hash
    self.service_subtype_ids.join(", ")
end

def service_subs_hash=(ids)
    self.service_subtype_ids = ids.split(",")
end
我觉得这有点骇人,我不确定我是否完全满意它作为答案,但它在我的隐藏字段中放置了一个逗号分隔的列表,我可以在提交时再次解析为服务子类型ID

如果有人知道如何在没有这个额外的虚拟参数的情况下做到这一点,我很想知道


感谢您的帮助。

刚刚实现了为子类型生成隐藏字段的双重功能。你知道上面的代码为什么会这样做吗?看起来实际的错误是:输入用户时出错:-未定义的方法“service_subtype”用于#你发布的代码不应该导致该错误。也许服务中有一个验证/回调调用服务_子类型而不是服务_子类型?添加了一个用于检查的post参数老实说,如果不查看整个模型或堆栈跟踪,我无法进一步诊断。当您遇到任何错误时,首先应该弄清楚的是“哪个语句导致了错误?”
 accepts_nested_attributes_for :service_subtypes
<% fields.fields_for :service_subtypes do |subtype| %>
  <%= subtype.hidden_field :id %>
<% end %> 
<% form.fields_for :services do |fields| %>
    <%= fields.hidden_field :wsi_web_serv_cats_uid_fk %>
    <%= fields.hidden_field :wsi_web_serv_types_uid_fk %>
    <%= fields.hidden_field :service_subs_hash %>
<% end %>
def service_subs_hash
    self.service_subtype_ids.join(", ")
end

def service_subs_hash=(ids)
    self.service_subtype_ids = ids.split(",")
end