2016-06-03 14 views
1

Wie kann ich challenge.name von Herausforderungen/Index in Herausforderungen/Form übergeben:Wie übergebe ich einen Parameter über link_to in _form?

Formularansicht

<%= simple_form_for(@challenge) do |f| %> 
    <%= f.text_field :name, placeholder: 'Enter Challenge' %> 
    <%= button_tag(type: 'submit') do %> 
    Save 
    <% end %> 
<% end %> 

Indexansicht

<% @challenges.each do |challenge| %>  
    <%= link_to new_challenge_path(challenge: {name: challenge.name}) do %> 
    + Challenge 
    <% end %> 
    <%= challenge.name %> 
<% end %> 

challenges_controller

def new 
    @challenge = Challenge.new 
    respond_modal_with @challenge, location: root_path 
end 

Mit dem obigen Code, wenn ein Benutzer die link_to klickt ich es sehe in dem Server vorbei, wie unten gezeigt, aber die challenge.name ist nicht im text_field anstelle des placeholder Text erscheinen.

Schienen s

Started GET "/challenges/new?challenge%5Bname%5D=HOPE+THIS+WORKS" for 127.0.0.1 at 2016-06-02 21:52:37 -0400 
Processing by ChallengesController#new as */* 
    Parameters: {"challenge"=>{"name"=>"HOPE THIS WORKS"}} 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 15]] 
    Rendered challenges/new.html.erb within layouts/modal (8.2ms) 
Completed 200 OK in 15ms (Views: 11.2ms | ActiveRecord: 0.4ms) 
+0

Sie Ajax implementieren müssen? – uzaif

+1

Können Sie Ihre 'Challenges/Form'- und Controller-Aktion posten? –

+0

Posted in Frage @PetrGazarov und aktualisierte Frage mit Controller-Aktion –

Antwort

2

Ihre link_to fügt nur die Herausforderung Namen params unter GET. Sie müssen diese Parameter dann an das neu konstruierte Objekt @challenge übergeben, damit das einfache Formular es verwenden kann (Formular funktioniert mit Attributen des Objekts, nicht GET/POST-Parameter). Versuchen Sie also, den Controller zu ändern:

def new 
    @challenge = if params[:challenge] 
    Challenge.new(params.require(:challenge).permit(:name)) 
    else 
    Challenge.new 
    end 
    respond_modal_with @challenge, location: root_path 
end 
+0

Aha, versuchen Sie etwas wie die in der aktualisierten Antwort - Sie müssen die Params explizit zulassen. – BoraMa

+0

Du bist zu schnell, ich habe gerade eine Klammer vermisst, sorry, bitte wiederholen :) – BoraMa

+1

Nicht das erste Mal, dass ich das hörte;) –

Verwandte Themen