【问题标题】:How do I load fields using fields_for :symbol - but only render the form field for the final object that the symbol references?如何使用 fields_for :symbol 加载字段 - 但仅呈现符号引用的最终对象的表单字段?
【发布时间】:2013-11-06 13:59:33
【问题描述】:

我有一个Category 模型has_many Skills

我有一个页面,我希望用户能够通过文本框(只是 skill 的名称)将单个新 skill 添加到选定的 category,同时列出页面上所有现有的categoriesskills 中的categories

我目前可以显示所有categories 及其包含的skills,但我不确定如何制作,因此用户只能创建一个新的skill 而无法编辑所有其他skills 那个belongs_to 一个category

这是我目前拥有的代码:

控制器:

def show
  . . .
  #needed for showing all categories
  @categories = current_user.categories
  #needed to show a blank skill when editing a category
  @skills = []
  @categories.each do |cat|
    @skills << cat.skills.build
  end
  . . .
end

查看:

<% @categories.each do |category| %> # I skip most of the code related to formatting
    <%= simple_form_for(category) do |f| %>
      <%= f.fields_for :skills do |s| %>
        <div class="inputs">
          <%= s.input :name %> 
          <%= s.hidden_field :category_id %>
          <%= s.hidden_field :id %>
        </div>
      <% end %>
          <%= f.button :submit %>
    <% end %>
<% end %>

它最终会产生一个如下所示的表单:

我尝试将f.fields_for :skills 更改为f.fields_for category.skills.last(因为category.skills 中的最后一个对象是在控制器中创建的新技能),这会导致一个空白文本框看起来像我需要的:

但是当我提交表单时,我收到一个“param not found: category”错误(指向我的 params.require(:category)...我的 Category 控制器中的行。

如果我使用:skills 的符号,我不确定为什么表单可以工作,但是当我使用category.skills.last(甚至category.skills.each)时,我会得到一个不同的错误:Enumerator:Class 的未定义方法 `model_name')。

我做错了什么?

【问题讨论】:

  • 分享你的服务器日志。

标签: ruby-on-rails forms ruby-on-rails-4 simple-form


【解决方案1】:

试试这个 f.fields_for :skills, category.skills.last

:skills 表示关系名称。 (category has many skills)

category.skills.last 表示要在表单中使用的对象。 例如

f.fields_for :skills, category.skills.build do |s| .. end

f.fields_for :skills, category.skills.last(3) do |s| ... end

【讨论】:

  • f.fields_for :skills, category.skills.build do |s| .. end 也允许使用更清洁的控制器(上面不包括凌乱的版本)。
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多