Ich erstelle eine App, um Spielergebnisse zwischen Freunden zu speichern. In meiner App werden Gruppen Ligen genannt.Hinzufügen eines Beitrittsschlüssels zu einer Gruppe
Um die Ligen privat zu halten, möchte ich einen Join-Schlüssel hinzufügen. Wenn eine Liga erstellt wird, wählt der Ersteller einen Join-Schlüssel. Später können andere Benutzer beitreten, indem sie aus einem Drop-down eine Liga auswählen und den genauen Join-Schlüssel eingeben. Der Benutzer kann nur, wenn der Join-Schlüssel mit der ausgewählten Liga übereinstimmt.
Controller:
def edit
@user = User.find(current_user.id)
@league_list = League.all.map{|l| [ l.league_name, l.id ] }
# @league_keys = League.all.map{|l| [ l.join_key, l.id ] }
end
def update
@user = User.find(current_user.id)
if @user.update(user_join_league_params) #&& @league_list.league_id == @league_keys.league_id
@user.save
redirect_to root_path, :notice => "Successfully joined this league!"
else
render 'index'
end
end
Wie man sehen kann ich die Benutzer bearbeiten haben league_id die Verbindung zu vervollständigen.
Ausblick:
<div class="panel panel-default" style="margin-right:10px; margin-left:10px; text-align:center">
<div class="panel-heading">
JOIN A LEAGUE
</div>
<div class="panel-body">
<%= simple_form_for(@user) do |f| %>
<%= f.select(:league_id, @league_list) %><br> <br>
# <%= f.input_field :join_key %><br> <br>
<p>!! Watch out this cannot be changed after !!</p>
<br> <br> <%= f.submit "Join league", class: "btn-submit" %>
<% end %>
</div>
</div>
Also würde ich dieses Formular gerne nur die Update-Aktion durchführen, wenn die gewählte Liga der in Schlüsseln gefüllt übereinstimmt.
Ich habe nach einer Antwort in zahlreichen Posts auf stackoverflow gesucht, aber ich konnte einen Beitrag mit einem ähnlichen Problem nicht finden.
Wie kann ich das schaffen?
EDIT:
Relations:
class User < ActiveRecord::Base
belongs_to :league
end
class League < ActiveRecord::Base
has_many :games
has_many :multiplayergames
has_many :users
end
ZWEITE EDIT:
Also habe ich versucht, die solloution zu implementieren.
Ich war mit simple_form für <% = f.select (: league_id, @league_list)%>
Ich habe versucht, es so zu tun:
<%= form_tag(user_path(@user), method: :put) do %>
<%= select_tag :league_id, options_for_select(@league_list) %><br> <br>
<p>Join Key</p>
<%= text_field_tag :join_key %><br> <br>
<p>!! Watch out this cannot be changed after !!</p>
<br> <br> <%= submit_tag "Join league", class: "btn-submit" %>
<% end %>
Jedoch gibt dies den Fehler:
param is missing or the value is empty: user
DRITTE EDIT:
Controller:
# JOIN A LEAGUE
def edit
@user = User.find(current_user.id)
@league_list = League.all.map{|l| [ l.league_name, l.id ] }
end
def update
@user = User.find(current_user.id)
@league = League.find_by_id(params[:league_id])
if @league.join_key == params[:join_key] && @user.update(user_join_league_params)
redirect_to root_path, :notice => "Successfully joined this league!"
else
redirect_to edit_user_path(current_user), notice: "Could not join league check if join key is correct!"
end
end
def user_join_league_params
params.permit!(:league_id,:join_key)
end
VIEW:
<%= form_tag(user_path(@user), method: :put) do %>
<%= select_tag :league_id, options_for_select(@league_list, :league_id) %><br> <br>
<p>Join Key</p>
<%= text_field_tag :join_key %><br> <br>
<p>!! Watch out this cannot be changed after !!</p>
<br> <br> <%= submit_tag "Join league", class: "btn-submit" %>
<% end %>
was zwischen diesem Modell ist Beziehung? – uzaif
Ich habe die Relationen aus den Modellen zu den Ligen –
hinzugefügt. Sie haben also Ligen mit Joinschlüsseln und möchten, dass der Benutzer den Joinschlüssel der Liga eingibt, der der Benutzer beitreten möchte. Wenn ja, wie lernt der Benutzer den Join Key, den er in das Formular eingeben muss? – Pavan