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

问题描述

我有一个表单,我想在 Langs 表中显示一些依赖于语言的表单元素 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 对象,但我想访问 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 %>

我在这里做了一些假设,因此请根据您的实际属性和模型进行调整。