2016-08-22 2 views
0

Ich baue eine App, um Sport-Spiele zu speichern, für die alle Benutzer in getrennten Ligen platziert werden. Ich habe viele zu viele dafür eingerichtet, aber wenn ein Benutzer die Anwendung anschaut, kann er nur alle Informationen von seiner aktuellen_League sehen.Aktualisieren Sie ein Attribut mit Wert aus Schleife

Jetzt versuche ich eine Schleife mit allen Ligen, in denen ein Benutzer ist, zu machen und der Benutzer sollte in der Lage sein, auf die Liga zu klicken, um seine aktive Liga zu ändern.

Routen

resources :users do 
    member do 
     post :change_current_league 

    end 
    end 

Usercontroller

def change_current_league 
    @user = current_user 
    @user.update(:current_league_id, params[:league_id]) 
    redirect_to :back, :notice => "Successfully changed your active league" 
end 

Ansicht

<% current_user.leagues.each do |l| %> 


<%= link_to change_current_league_user_path(current_user, l), method: :post, class: 'btn btn-default btn-sm' do %> 



        <%= l.id %><%= l.league_name %><br> 
<% end %> 




<% end %> 

Was soll ich tun, diese Arbeit zu bekommen?

Sorry, wenn es ein bisschen wie ein Noob Frage: P

EDIT:

def change_current_league 
    @user = current_user 
    @user.update_attribute(:current_league_id, 1) 
    redirect_to :back, :notice => "Successfully changed your active league" 
end 


    resources :users do 
    member do 
     patch :change_current_league 

    end 
    end 

Dies funktioniert, aber wie bekomme ich die richtige league_id in den Anwender-Controller?

EDIT2:

def change_current_league 
    @league = League.find(params[:league_id]) 

    @user = current_user 

    @user.update_attribute(:current_league_id, @league) 

    redirect_to :back, :notice => "Successfully changed your active league" 
end 
+0

Sie aktualisieren Verwendung r atrribute so seine a put/patch Anfrage nicht post Methode – Navin

+0

übergeben Sie die Liga_id als Parameter mit Ihrem Link wie folgt <% = link_to change_current_league_user_path (current_user, current_league_id: l.id), Methode:: patch, Klasse: 'btn btn -default btn-sm 'do%> – Navin

+0

Okay thx. und jetzt habe ich das im usercontroller probiert (check edit). Aber es aktualisiert das Feld auf Null. –

Antwort

1

Try this, Sie Benutzerattribut aktualisieren, um seine Put/Patch-Anforderung nicht request.pass der league_id als Parameter mit Ihrem Link wie folgt veröffentlichen,

<%= link_to change_current_league_user_path(current_user, current_league_id: l.id), method: :patch, class: 'btn btn-default btn-sm' do %> 

und in Ihrem Usercontroller (check edit) ersetzen mit Balg Linie

@user.update_attribute(current_league_id: params[:current_league_id]) 
Verwandte Themen