如何根据语言动态生成 Rails 表单

How to generate Rails form dynamically dependant on languages

我有一个表单,我想根据 Langs table 中的语言显示一些表单元素 x 次,它是具有 has_many 关联的嵌套属性。我正在尝试使用 fields_for 但没有成功。

我在模板中有一个 Lang 对象和这段代码。

  <%= 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 对象,但我想访问 @langs 中的每个 lang(这只是 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 %>

我这里是做一些假设,所以请根据您的实际属性和模型进行调整。