2017-04-11 8 views
0

Ich versuche, Parameter mit link_to mit Ruby auf Schienen übergeben, aber es sagt, dass der ID-Parameter, den ich sende, null ist. Code von wo ich die ID sende.Übergeben von Parametern mit link_to

<% @conference.papers.each do |paper| %> 
<tr> 
    <td><%= paper.title %></td> 
    <td><%= paper.author %></td> 
    <td><%= link_to "Download Paper", paper.attachment_url %></td> 
    <td><%= link_to 'Reviews', paper %></td> 
    <% if (paper.accepted) %> 
     <td><%= "Accepted" %></td> 
    <% else %> 
     <td><%= "Not accepted" %></td> 
    <% end %> 
    <% if (@state1 && paper.accepted == false) %> 
    <td><%= button_to "Accept", accept_paper_path(id: paper.id), class: "btn btn-danger", data: { confirm: "Are you sure that you wish to accept #{paper.title}?"} %></td> 
    <% end %> 
    <% if (@state2) %> 
    <% session["a"] = paper.id %> 
    <td><%= link_to "Review paper", new_review_path(id: paper) %></td> 
    <% end %> 

</tr> 
<% end %> 

Code für die Überprüfung Controller

def new 
@paper = Paper.find_by_id(params[:id]) 

@review = Review.new() 

Ende

Antwort

0

Sie verfehlten .id in

link_to "Review paper", new_review_path(id: paper.id) 

Aber es ist kein g ood Lösung. Wenn Ihr Paper Modell has_many :reviews, wäre es besser, reviews Routen in paper 's zu verschachteln. Wie folgt aus:

# config/routes.rb 

resources :papers do 
    resources :reviews 
end 

Und so wird Ihr link_to wie folgt aussehen:

link_to "Review paper", new_paper_review_path(paper) 

welche generieren

/papers /: paper_id/Bewertungen/new

Sie können mehr über das Routing von Rails here erfahren.

+0

Weglassen der id eigentlich keine Rolle spielt, da Schienen 'nennen .to_param' auf dem Modell. Die Ergebnisse von Papierpfad (Papier), Papierpfad (ID: Papier) und Papierpfad (ID: Papier.ID) sind identisch. – max

0

Lets durch die Einrichtung der Routen richtig starten:

resouces :papers do 
    member do 
    patch :accept 
    end 
end 

Diese Sie eine Bewertung von PATCH /papers/:id annehmen lassen. Um die Schaltfläche Verwendung zu erstellen:

<%= button_to accept_paper_path(paper), method: :patch %> 

Beachten Sie, dass dies die PATCH oder PUT http-Methode verwenden sollte - nicht GET da es sich um eine nicht-idempotent Aktion.

Beachten Sie, dass Sie das Modell nur übergeben können, anstatt accept_paper_path(id: model) oder accept_paper_path(id: model.id) zu tun.

Für Bewertungen werden Sie zu schaffen, was ein nested resource genannt wird:

resouces :papers do 
    member do 
    patch :accept 
    end 
    resources :reviews, only: [:new, :create] 
end 

Dies gibt Ihnen die Route /papers/:paper_id/reviews/new.

<%= link_to "Review paper", new_paper_review_path(paper) %> 

das Formular, um einen neuen Beitrag zu der Verwendung richtigen Pfade verwenden, um einen Array mit den Eltern und Kind zu erstellen:

<%= form_for([@paper, @review]) %> 
Verwandte Themen