2013-08-12 3 views
0

두 가지 모델이 있습니다. 캔버스 블록해당 부분의 관련 엔티티 ID를 가져옵니다. 레일

저는 모두 9 개의 블록이 연결된 캔버스를 가지고 있습니다.

캔버스/show.html.erb 여기

<body > 
    <table class="table canvas" cellspacing=0 > 
    <tr class="twenty"> 
     <th colspan=2>KP</th> 
     <th colspan=2>KA</th> 
     <th colspan=2>VP</th> 
     <th colspan=2>CR</th> 
     <th colspan=2>CS</th> 
    </tr> 
    <tr class="twenty" > 
     <td rowspan=3 colspan=2 > 
     <%= render :partial => @blocks[0], :locals => { :id_block => 0 } %> 
     </td> 

(...) 

</table> 
</body> 

내 컨트롤러 : 각 캔버스에

class CanvasController < ApplicationController 

    before_filter :authenticate_user! 

    def show 
    @blocks=Array.new 
    9.times do |acc| 
     @blocks << Block.find_or_create_by_id_case_and_canvas_id(acc+1,params[:id]) 
    end 
    end 

    def index 
    @canvas=Canvas.all 
    end 
end 

, 내 블록에 내가 필요로하는 그 부분 지문에 해당하는 일부 파셜을 렌더링하는 개미 내가 렌더링하고있는 블록의 ID를 가지고 있습니다.

<%= id_block %> 

문제 -block.html.erb

블록/로컬 변수 id_block 부분이 인식되지 않는다는 것이다.

내가 같은 렌더링 작성하는 모든 종류의 방법을 시도했습니다, 그는 환영 왜 누군가가 알고 있다면 내가 ... 지금 가지 생각 중이야

 <%= render @blocks[0], :id_block => 0 %> 
     <%= render :partial => "blocks/block", :locals => { :id_block => 0 } %> 
     <%= render :partial => "blocks/block", :id_block => 0 %> 

감사합니다 :)

+1

부분 파일 이름이 '_'대신 '-'로 시작하는 것이 정상입니까? 아마도 관련이 없지만 ... ^^. 또한 이것을 시도해 볼 수도 있습니다 : render : partial => "blocks/block", : object => @blocks [0]. 그리고 부분적으로 : <% = block.id %>. – Kulgar

+0

로그의 출력은 무엇입니까? 그리고 당신은 확실한가? blocks/-block.html.erb "의 철자가 틀린가요?"blocks/_block.html.erb " – Bigxiang

+0

"_ "대신"- "의 경우 이것은 입력 오류 일뿐입니다. 해결책을 찾으십시오. – Zoz

답변

0

좋아요, 그래서 ... 내 의견을 통해 문제가 해결되면보다 명확한 답변을 게시 할 것입니다. :)

먼저 부분 파일 이름은 항상 밑줄로 시작해야합니다 : "_" "-"이 아니어야합니다. :) 이것은 오히려 컨벤션입니다 (그리고 "-"가 전혀로드되지 않은 부분 시작을 알고있는 한 ...). ;)

둘째, 깨끗한 솔루션은 다음과 같이 부분에 객체로 블록을 통과 하는 것입니다 원하는 것을 할 수 있습니다 :에 ... 그

<%= render :partial => "blocks/block", :object => @blocks[0] %> 

를 그것이 무엇을하는 것은 당신의 partial은 부분 이름과 정확히 같은 이름을 가진 객체를 갖습니다. 따라서 부분 "_block"의 이름을 지정하면 부분 변수의 "block"변수에 객체 "block"이 저장됩니다.

그러나 "_canvas_block"부분의 이름을 지정하면 변수의 일부분에 "canvas_block"이라는 변수가 지정됩니다.

이 기능은 현지인과는 약간 다른 방식으로 작동하지만 실제로는이 방법을 사용하는 것이 훨씬 깔끔합니다. 이제 블록 변수에 저장된 블록 개체를 가지고 : 당신의 부분에 다음

, 당신은 전화를해야 :

<%= block.id %> 

조금 더 정보 in the ruby guide chapter 3.4.4합니다.

또한 "컬렉션"을 부분으로 전달하는 다음 장 3.4.5를 읽는 것이 좋습니다. :)

관련 문제