1

我有一个Category模型has_many Skills

我有一个页面,我希望用户能够通过文本框(只是 的名称)skill向所选内容添加一个新的,同时列出页面上的所有现有内容以及其中的.categoryskillcategoriesskillscategories

我目前可以显示所有categories包含skills的.skillskillsbelongs_tocategory

这是我目前拥有的代码:

控制器:

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 :skillsf.fields_for category.skills.last(因为最后一个对象category.skills是在控制器中创建的新技能),这会导致一个空白文本框看起来像我需要的:

只渲染空白技能字段,但不能提交

但是当我提交表单时,我收到一个“未找到参数:类别”错误(指向我的 params.require(:category). . . . 我的 Category 控制器中的行。

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

我究竟做错了什么?

4

1 回答 1

2

尝试这个 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
于 2013-11-06T14:18:46.370 回答