问题描述
我有一个表单,我想在 Langs 表中显示一些依赖于语言的表单元素 x 次,它是具有 has_many 关联的嵌套属性。我正在尝试使用 fields_for
但没有成功。
<%= fields_for :categories_versions,@langs do |lang| %>
<div class="card mt-4 mb-4">
<div class="card-body">
<div class="container mt-4">
<%= "Category for #{Lang.find(lang.id).lang}" %><br/>
它产生 ActionView 对象,但我想访问 lang
中的每个 @langs
(这只是 Lang.all
。
它只为我生成一组,但我有 2 种语言,所以我想要的输出是包含 2 组列的表单,用于两种语言中的每一种,并带有语言名称。
我做错了什么?
解决方法
fields_for
提供给您的对象(即您示例中的 |lang|
)是表单助手,而不是来自 @lang
集合的对象。因此,要获取当前 lang
的 id,您需要执行 lang.object.id
。我建议您将 |lang|
更改为 |lang_f|
以避免混淆。此外,如果 @langs
与 :categories_versions
的类型不同,我不确定这是否会正常工作。你可能想要这样的东西:
<% @langs.each do |lang| %>
<%= fields_for :categories_versions do |version_f| %>
<%= "Category for #{lang.name}" %><br/>
<%# You will probably want to associate the category version with the lang. %>
<%# Maybe like this. Depends on how you set it up %>
<%= version_f.hidden_field :lang_id,lang.id %>
...
<% end %>
<% end %>
我在这里做了一些假设,因此请根据您的实际属性和模型进行调整。