2013-08-21 2 views
0
에서 지역 변수 순서를 레일

그래서 작동 다음 ERB이 : 내 컨트롤러에서는 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을 덮어 쓰는 것 같아요. 그러나 왜 그리고 어떻게 문제를 해결합니까? 나 또한 네이티브 폼 빌더를 사용 했으므로 형식적인 문제는 아닌 것 같습니다.

UPDATE : 그래서 나는 @user_skills 배열이 실제로 지속되지 않았으며 #skill_id 또는 #skill.name이없는 방금 만든 user_skill가 포함되어 있음을 발견 ! 그리고 양식의 시작 부분에 UserSkill.new을 입력하면 @user_skills 배열이 괜찮습니다. 어쩌면 생성 된 객체를 쿼리에 자동으로 포함하는 캐싱 레이어가 activerecord에있을 수 있습니다. 아니면이 버그입니까?

답변

0

current_user.user_skills.newhas_many 협회에 current_user에 빈 user_skill을 추가합니다. @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 속성을 연결합니다. 베어 본 (bare-bones) 버전은 다음과 같이 보일 수 있습니다.

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

감사합니다. 그것은 또한 내가 알아 낸 것입니다. 나는 current_user.user_skills가 영속 객체만을 포함 할 것이고, 분명히 사실이 아님을 전제했습니다. – randomor