2011-07-26 7 views
1

링크를 통해 일부 값을 전달 하려는데 이들을 보이지 않게하고 싶습니다. 이 내가 해봤 옵션은 다음과 같습니다 -ROR link_to 메소드 문제

<%= link_to 'Add comment', :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %> 

<%= link_to 'Add comment',{ :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id}, :method => :post %> 

<%= link_to 'Add comment', :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id, %> 

<%= link_to 'Add comment', new_comment_path, :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %> 

첫 번째 옵션 매개 변수로 취급 방법 : http://localhost:2000/comments/new?idea_id=1&method=post&user_id=1

두 번째 옵션은 - 이렇게 가고 : "라우팅 오류 번호 : 오류 라우팅 원인도 http://localhost:2000/comments/new?idea_id=1&user_id=1http://localhost:2000/comments/new?idea_id=1&user_id=1

네 번째 옵션 - 보이는 좋은 (HTTP :/양식을로드하지만, 물론 같은입니다 - 경로는 "새/의견 /"

세 번째 옵션과 일치/localhost : 2000/comments/new)하지만 두 번째 것과 같은 라우팅 오류가 발생합니다.

내가 뭘 잘못하고 있니?

미리 감사드립니다.

내 경로를 제공하도록 요청 받았다

PS, 그래서 여기에 그들이있다 :

resources :rights 

    resources :comments 

    resources :ideas 

    resources :users 

    resources :sessions, :only => [:new, :create, :destroy] 

    root :to => 'main#home' 

    #match '/comments/new' => "comments#new" # this doesn't help 

    match '/home', :to => 'main#home' 
    match '/contact', :to => 'main#contact' 
    match '/signin', :to => 'sessions#new' 
    match '/signout', :to => 'sessions#destroy' 
    match '/signup', :to => 'users#new' 
+0

무엇을 당신의 노선 파일은 어떻게 생겼습니까? – Dogbert

+2

'보이지 않음'이란 무엇을 의미합니까? –

답변

2

당신이 편안하고 경로

이있는 경우
<%= link_to 'Add comment', new_comment_path, 
      :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %> 

이 방법은 html_options의 일부입니다

<%= link_to 'Add comment', comments_path, 
      :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %> 
+0

나는 네가 틀렸어. comments_path는 파일 색인을 나타내고 new_comment_path는 comments/new를 나타냅니다. – gisek

+1

GET'comments_path'는 인덱스를 가리 킵니다. 그러나 POST'comments_path'는'create' 액션을 말합니다. – Bohdan

0

가 제대로 경로를 정의 적이 있습니까? 그 모습을 보여줄 수 있습니까? 만들 때이 같은 소리,

+0

하지만 '새로운'동작에 2 개의 값을 전달해야 암시 적으로 다른 모델의 '표시'보기가 형성됩니다. – gisek

1

다른 사람이 말했듯이 ... resource :comments

또한, 일반/새로운 작품에서 GET으로하고, POST가 전송됩니다 : 당신은 일에 그것을 위해 이런 일을해야한다 경로 파일에 문제가 있습니다. resource :comments이 정의되어 있는지 확인하거나 여기에 경로 파일을 게시하면 도움을 드리겠습니다. POST 할 때 작동하지 않을 가능성이 있습니다 ...

'보이지 않는'변수 (URL에 변수가 표시되는 것을 원하지 않는다고 가정)를 원한다면 POST을 페이지에 연결하는 대신 페이지에 연결하십시오. 이 경우 두 번째 예가 최선책입니다.

match '/comments/new' => "comments#new" 

내놔 : 그것은 그건 당신이 당신의 routes.rb이 사용 해보세요 resource :comments

를 사용하는 경우 '어떤 루트'오류의 원인이 무엇을 할 수 있도록/새에 게시 규칙에 반하는 그게 올바른 페이지를로드해야하고 당신이 통과 한 변수에 대한 액세스를 params을 통해 제공해야합니다.

규칙에 위배됩니다. 이러한 변수가 URL에 나타나지 않게하려는 이유가 있습니까? 자신이 생각하는 것을 수행하는 더 좋은 방법이있을 가능성이 높습니다. 설명 할 수있는 한 최선을 다해 조언 할 수 있습니다.

+0

내 경로에 resource : comments가 있습니다. 네, 네가 맞아이 POST가 라우팅 오류를 일으킨다. – gisek

+0

'/ comments/new'=> "comments # new"를 내 경로에 추가하면 라우팅 오류가 해결되었지만 매개 변수가 전달되지 않았습니다. – gisek

+0

내가하고 싶은 일은 작성자 (scaffold)로 생성 된 주석 작성을 수정하여 작성자 및 주석 처리중인 정보가 포함되도록하는 것입니다. 아이디어가 있습니다. 누구나 코멘트를 달 수 있습니다. 따라서 user_id와 idea_id는 Idea show view에서 전달되어 새로운 action을 주석 처리해야합니다. 그리고 나는 id와 같은 값을 명시 적으로 전달하는 것이 전문적이지 않다고 생각합니다. 그럼 어떻게 할 생각입니까? :) – gisek

0

해야합니다, 당신과 같이 두 개의 해시를 분리해야합니다

<%= link_to 'Add comment', {:controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id}, :method => :post %> 
+0

이것은 라우팅 에러를 일으 킵니다. 나는 행동을 취하기 위해 게시 방법을 강요하려고하기 때문에 가정합니다. – gisek

+0

경로를 게시 할 수 있습니까? –

+0

질문에 추가됨 – gisek