2017-10-06 5 views
-1

를 작동하지 않는 블록을 함께 'LINK_TO가'블록하지 않고 사용하는 경우 LINK_TO 그것은 완벽하게 작동레일 :</p> <pre><code><%= link_to "Ololo", {controller: "posts", action: "upvote", id: post.id}, method: :put, remote: true, class:"nav-link" %> </code></pre> <p>을하지만 블록을 사용하려고 할 때이 오류로 끝 :

 <%= link_to {controller: "posts", action: "upvote", id: post.id}, method: :put, remote: true, class:"nav-link" do %> 
      <%= image_tag('icons/candy.svg', alt: "Candies", class:"rounded-circle icon-nav") %> 
      <%= post.get_upvotes.size %> 
     <% end %> 
그러나, 나는 어를 알아 내기 위해 너무 안돼서,

SyntaxError (/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ':', expecting '}' 
...r.append= link_to {controller: controller_name, action: "up... 
...        ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ',', expecting '}' 
...troller_name, action: "upvote", id: entity.id}, method: :put... 
...        ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected tLABEL 
...pvote", id: entity.id}, method: :put, class:"nav-link", remo... 
...        ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ',', expecting keyword_end 
...method: :put, class:"nav-link", remote: true do @output_buff... 
...        ^
/home/alex/test/app/views/application/_votes_exp.html.erb:49: syntax error, unexpected keyword_ensure, expecting end-of-input): 

그래서 문자 해시를 이해하지 못하는 것처럼 보인다 :

그리고 여기에 오류 메시지입니다 뭐가 잘못됐는데 ... 어떤 도움을 주셔서 감사합니다!

피씨 : link_to가 css 클래스를 엉망으로 만들기 때문에 문자 해시를 제거 할 수 없습니다 (주소의 일부로 클래스 추가).

routes.rb : 나는 또한 컨트롤러 이름이

UPDATE (내 예에 코드의 가독성을 위해 감소) 변수에 의해 표현되기 때문에 'upvote_post_path'같은 것을 대신 이전의 인수 스타일을 사용해야합니다 같은 것들에

Rails.application.routes.draw do 
    root to: "home#index" 

    resources :posts do 
    member do 
     put "upvote", to: "posts#upvote" 
    end 
    end 
end 
+0

대신 컨트롤러, 동작 및 ID를 전달하는 경로를 전달할 수 있습니다. 경로를 추가 할 수 있습니까? –

+0

예, 물론입니다! 나는 그 질문을 갱신 할 것이다. –

답변

2

여는 중괄호 :

some_method { a: 'b' } 

이 모호합니다. {a.each { ... }처럼 블록을 열 수 있거나 해시 리터럴을 열 수 있습니다. 당신은 후자라고 생각하지만 Ruby는 오류라고 생각합니다.

가장 쉬운 해결책은 메소드 호출-괄호를 사용하는 것입니다

<%= link_to({controller: "posts", action: "upvote", id: post.id}, method: :put, remote: true, class:"nav-link") do %> 
      ^--------------------------------------------------------------------------------------------------^ 
또한 다른 곳에서 여는 중괄호 이동 변수를 사용할 수

:

<% upvote_post = { controller: 'posts', action: 'upvote', id: post.id } %> 
<%= link_to upvote_post, method: :put, remote: true, class:"nav-link" do %> 

이 하나

link_to "Ololo", {controller: "posts", ... 

은 첫 번째 인수 ("Ololo",)가 tel로 모호성을 제거하기 때문에 정상적으로 작동합니다. 루비 루비가 인수 목록을 파싱 중입니다.

+0

대단히 감사합니다! 두 번째 방법은 완벽하게 작동했습니다. 그러나 첫 번째 괄호는 오류가 발생했습니다 : SyntaxError (/home/alex/test/app/views/application/_votes_exp.html.erb:4 : 구문 오류, 예기치 않은 ',', 예상 ')' . ..tion : "upvote", id : entity.id}, 메서드 : : put, remote : true, ... –

관련 문제