복붙노트

[RUBY-ON-RAILS] 레일 : 파셜에 지역 주민을 전달하는 구문에 대해 혼란

RUBY-ON-RAILS

레일 : 파셜에 지역 주민을 전달하는 구문에 대해 혼란

파셜 렌더링 (그리고 그들로 지역 주민을 통과)에 관해서 이해 레일 "마법".

왜이 작업을 수행합니다

<%= render "rabbits/form" %>

그리고이 작품 :

<%= render "rabbits/form", :parent => @warren, :flash => flash %>

하지만이 작동하지 않습니다

<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>

그러나이 작업을 수행합니다

<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>

내가 S.O.에 사람을 귀찮게 할 필요가 없습니다 또한, 어떻게 이러한 미묘한 차이를 찾아 볼 수 있습니까?

해결법

  1. ==============================

    1.짧은 대답은 당신이 전달하는 첫 번째 인수에 방법의 모습을 렌더링하면 (이 포함 현지인 => {ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ} : 부분 => 'foo는') 해시를 전달합니다. 다음은 모두에 전달합니다 당신의 인수 해시로하고 그에 따라 그 구문 분석.

    짧은 대답은 당신이 전달하는 첫 번째 인수에 방법의 모습을 렌더링하면 (이 포함 현지인 => {ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ} : 부분 => 'foo는') 해시를 전달합니다. 다음은 모두에 전달합니다 당신의 인수 해시로하고 그에 따라 그 구문 분석.

    당신이 당신의 첫 번째 인수로 문자열을 전달하면, 첫 번째 인수가 부분적인 이름입니다 가정, 그리고 지역 주민으로 나머지를 전달합니다. 그러나 후속 호출, 그것은 실제로 양수인 : 지역 주민 => your_locals_argument,이 경우 전체는 다음과 같습니다 현지인 => {지역 주민 해시} 대신 {주민 해시}의; 즉, 당신이 결국 : 지역 주민 => {: 지역 주민 => {지역 주민 해시}}보다는 : 지역 주민 => {지역 주민 해시}.

    내 충고는 단지이다 그래서 항상 명시 적으로 모두 같은 방식으로 시간 값을 전달, 당신은 문제가되지 않습니다. (레일 2 actionpack / lib 디렉토리 / base.rb, 렌더링 () 메소드 3이 다른 레일) 이것에 대해 배우기 위해, 나는 코드 자체에 직접 갔다. 그것은 좋은 운동입니다.

    또한, SO에 "귀찮게"사람에 대한 걱정을하지 않습니다. 이 사이트가 존재하는 이유입니다. 난이 뭔가를 배웠습니다.

  2. ==============================

    2.지정해야하는 경우 : 지역 주민, 당신은 지정해야합니다 일부 또는 : 템플릿

    지정해야하는 경우 : 지역 주민, 당신은 지정해야합니다 일부 또는 : 템플릿

    <%= render :partial => "rabbits/form", :locals => {...} %>
    

    SHOULD 작업

  3. ==============================

    3.honost하기 위해, 나는 단지 내가 지난 몇 년을위한 레일로 유지 되었기 때문에, 이러한 사용 사례에 대해 알고 그 일을하는 새로운 방법이 추가 된 것을 공지 사항을 참조하십시오. 나는 종종 자신을 거기에 실수를하지만, 대개는 쉽게 수정할 수 있습니다.

    honost하기 위해, 나는 단지 내가 지난 몇 년을위한 레일로 유지 되었기 때문에, 이러한 사용 사례에 대해 알고 그 일을하는 새로운 방법이 추가 된 것을 공지 사항을 참조하십시오. 나는 종종 자신을 거기에 실수를하지만, 대개는 쉽게 수정할 수 있습니다.

    그것은 당신이 저를 요구하는 경우에 철저를 통해 생각하고되지 않은 레일 API의 그 부분 중 하나입니다. 그것은 단지 이전 동작 중 하나를 비하하지 않고, 지난 몇 년 동안 점점 더 많은 문법 설탕을 축적. 렌더 방법은 당뇨병이있다.

    그것은 더 악화하려면 다른 컨트롤러와 뷰으로 동작을 렌더링합니다. 나는 또한 파일, 템플릿, 액션 또는 부분이 있는지 확인하기 위해 첫 번째 인수의 내용을 살펴 봅니다. 이 슬래시로 시작하면 다음은 파일, 또는 그런 일.

    나는 가능하면 짧은 표기법을 사용하여 찬성입니다. 짧은 표기법 아주 잘 의도를 전달 할 수 있기 때문에. 그것을 읽을 때, 그것은 일반적으로 당신은 무엇을 생각 하는가. 를 작성하는 것은 그 정직하지 않다.

  4. ==============================

    4.여기 http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render에서 렌더링 방식의 소스는 다음과 같습니다

    여기 http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render에서 렌더링 방식의 소스는 다음과 같습니다

    def render(options = {}, locals = {}, &block)
      case options
      # Here is your last case
      when Hash
        if block_given?
          _render_partial(options.merge(:partial => options.delete(:layout)), &block)
        elsif options.key?(:partial)
          _render_partial(options)
        else
          template = _determine_template(options)
          lookup_context.freeze_formats(template.formats, true)
          _render_template(template, options[:layout], options)
        end
      when :update
        update_page(&block)
      else
        # here the first three cases
        _render_partial(:partial => options, :locals => locals)
      end
    end
    

    이 도움말을 희망!

  5. from https://stackoverflow.com/questions/4402556/rails-confused-about-syntax-for-passing-locals-to-partials by cc-by-sa and MIT license