所以我有以下有效的erb:
<ul class="list-group">
<%- @user_skills.each do |user_skill| %>
<li class="list-group-item"><%= user_skill.skill.name %></li>
<% end %>
</ul>
<%= semantic_form_for current_user.user_skills.new do |f| %>
<%= f.inputs %>
<%= f.actions %>
<% end %>
在我的控制器中,我有一个@user_skills = current_user.user_skills
. 一旦我交换了两个块:
<%= semantic_form_for current_user.user_skills.new do |f| %>
<%= f.inputs %>
<%= f.actions %>
<% end %>
<ul class="list-group">
<%- @user_skills.each do |user_skill| %>
<li class="list-group-item"><%= user_skill.skill.name %></li>
<% end %>
</ul>
它会引发如下错误:undefined method
name' for nil:NilClass`。所以我猜测表单构建器以某种方式覆盖了 ul 块内的 user_skill 。但是为什么以及如何解决这个问题?这似乎不是一个格式问题,因为我还使用了本机表单生成器。
更新:所以我发现@user_skills 数组实际上包含刚刚创建的 user_skill,它没有被持久化并且没有#skill_id
or #skill.name
!如果我UserSkill.new
在表格的开头这样做,那么@user_skills 数组就可以了。也许在 activerecord 中有一个缓存层,它会自动将刚刚创建的对象包含到查询中。或者这是一个错误?