2010-05-24 3 views
1

다음 코드는 다음 <%=<%로 교체 할 경우, 다음 모든 작동하는 동안Ruby on Rails에서 <% = 또는 <%는 쇼인지 아닌지 만 중요하지만, 컴파일 오류가 발생하는 이유는 무엇입니까?

<div id="vote_form"> 
    <%= form_remote_tag :url => story_votes_path(@story) do %> 
    <%= submit_tag 'shove it' %> 
    <% end %> 
</div> 

컴파일 오류를

을 제공합니다. 나는 그들이 단지 "쇼"또는 "보이지 않음"에 의해서만 다르다고 생각했지만 실제로 컴파일 에러를 일으킬 것인가?

오류 :

> SyntaxError in Stories#show 
> 
> Showing 
> app/views/stories/show.html.erb where 
> line #17 raised: 
> 
> compile error C:/Software 
> Projects/ror/shov12/app/views/stories/show.html.erb:17: 
> syntax error, unexpected ')' ... 
> story_votes_path(@story) do).to_s); 
> @output_buffer.concat ... 
>        ^C:/Software 
> Projects/ror/shov12/app/views/stories/show.html.erb:23: 
> syntax error, unexpected kENSURE, 
> expecting ')' C:/Software 
> Projects/ror/shov12/app/views/stories/show.html.erb:25: 
> syntax error, unexpected kEND, 
> expecting ')' 

답변

2

당신은 당신의 오류 메시지를 참조하십시오. <%= ... %> erb를 사용하는 경우이를 (...). to_s로 바꿉니다. do 다음에 닫는 paranthesis가 올 때 Ruby가 혼동 스러울 때, 대신에 일종의 블록을 기대합니다.

0

실제로 이것은 3 이전의 Rails 버전이 ERB 템플릿에서 Ruby 블록을 처리하는 방법에있어서 모순입니다. form_for 도우미가 콘텐츠 주위의보기에 HTML form 요소를 삽입했기 때문에 ERB 태그에서 등호 기호를 사용해야하고 Rails 3에서이를 수정해야합니다.

1

이 FormHelper 클래스의 때 form_tag 메소드를 호출 때 form_tag 사용하는 경우 this

를 살펴 보자 있습니다. 이 도우미 메서드는 HTML에 의존하여 코드를 반환합니다.

 # File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 331 
331:  def form_remote_tag(options = {}, &block) 
332:   options[:form] = true 
333: 
334:   options[:html] ||= {} 
335:   options[:html][:onsubmit] = 
336:   (options[:html][:onsubmit] ? options[:html][:onsubmit] + "; " : "") + 
337:   "#{remote_function(options)}; return false;" 
338: 
339:   form_tag(options[:html].delete(:action) || url_for(options[:url]), options[:html], &block) 
340:  end 

이렇게하면 컴플라이언스 예상 블록과 알 수없는 오류를 알 수 있습니다.

관련 문제