2013-08-21 53 views
0
Rails的局部變量爲了

所以我有以下的僱員再培訓局的作品:在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名」的零:NilClass`。所以我猜測表單構建器是以某種方式覆蓋ul塊內的user_skill。但爲什麼以及如何解決問題?它似乎不是一個formtastic問題,因爲我也使用了本地表單構建器。

更新: 因此,我發現@user_skills數組實際上包含剛纔創建的user_skill,它尚未被保留,並且沒有#skill_id#skill.name!如果我在表單的開頭做UserSkill.new,那麼@user_skills數組就可以。也許在activerecord中有一個緩存層,它會自動將創建的對象包含到查詢中。或者這是一個錯誤?

回答

0

致電current_user.user_skills.new將空白user_skill添加到has_many關聯current_user。由於@user_skills只是對current_user.user_skills的引用,因此在初始化新user_skill記錄後迭代時,空白實例將包含在無序列表中。

你會更好,只是初始化在形成新的user_skill

<%= semantic_form_for UserSkill.new do |f| %> 
    <%= f.inputs %> 
    <%= f.actions %> 
<% end %> 

然後,在創建UserSkillsController的動作,與current_useruser_skill屬性相關聯。一個裸骨的版本可能看起來像這樣:

def create 
    @user_skill = current_user.user_skills.create(params[:user_skill]) 
    respond_with @user_skill 
end 
+0

謝謝。這也是我發現的。我認爲current_user.user_skills將只包含持久對象,這顯然是不正確的。 – randomor