我有一个Category
模型has_many
Skills
。
我有一个页面,我希望用户能够通过文本框(只是 的名称)skill
向所选内容添加一个新的,同时列出页面上的所有现有内容以及其中的.category
skill
categories
skills
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
是在控制器中创建的新技能),这会导致一个空白文本框看起来像我需要的:
但是当我提交表单时,我收到一个“未找到参数:类别”错误(指向我的 params.require(:category). . . . 我的 Category 控制器中的行。
我不确定为什么如果我使用符号时表单可以工作,:skills
但在我使用时不起作用category.skills.last
(甚至category.skills.each
- 当我这样做时我得到一个不同的错误:未定义的方法 `model_name' for Enumerator:Class)。
我究竟做错了什么?