Ich aktualisiere meine Formularfelder dynamisch mit AJAX basierend auf Auswahlen aus anderen ausgewählten Feldern. Alles funktioniert gut beim ersten Eintrag. Obwohl ich nach dem Absenden des Formulars mit Validierungsfehlern und der Verwendung von 'Neu' Rendering einen Routingfehler erhalte. Ich habe die Route für update_players über Ressourcen hinzugefügt (siehe unten). Ich glaube, mit meinen Routen stimmt etwas nicht.Keine Route stimmt mit [GET] nach Postvalidierungsfehler überein Rails 4
Das war mein Hinweis: https://kernelgarden.wordpress.com/2014/02/26/dynamic-select-boxes-in-rails-4/
config/routes.rb:
geharkt Routen:
...
update_players GET /games/update_players(.:format) games#update_players
games GET /games(.:format) games#index
POST /games(.:format) games#create
new_game GET /games/new(.:format) games#new
edit_game GET /games/:id/edit(.:format) games#edit
game GET /games/:id(.:format) games#show
PATCH /games/:id(.:format) games#update
PUT /games/:id(.:format) games#update
DELETE /games/:id(.:format) games#destroy
...
games_controller.rb
def show
@game = Game.find(params[:id])
end
def new
@users = User.all
@game = Game.new
end
def create
@game = Game.new(game_params)
if @game.save
flash[:success] = 'Game Saved!'
redirect_to current_user
else
flash.now[:alert] = 'Game did not save'
@users = User.all
render 'new'
end
end
...
def update_players
@users = Group.find(params[:group_id]).users
respond_to do |format|
format.js
end
end
Vermögenswerte/Javascripts/games.coffee:
update_players = ->
$.ajax 'update_players',
type: 'GET'
dataType: 'script'
data: {
group_id: $("#groups-select option:selected").val()
}
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX Error: #{textStatus}")
success: (data, textStatus, jqXHR) ->
console.log("Dynamic player select OK!")
$(document).on 'ready page:load', update_players
$(document).on 'change', '#groups-select', update_players
views/Spiele/update_players.js.coffee:
$("#players-select").empty()
.append("<%= escape_javascript(render(:partial => "players_in_group_list")) %>")
Nach 'neuen' Rendering auf erstellen Dies ist der Fehler, den ich erhalte:
Started GET "/update_players?group_id=1&_=1458493122921" for ::1 at 2016-03-20 10:58:43 -0600
ActionController::RoutingError (No route matches [GET] "/update_players"):
nach unten Das gibt mir ein besseres Verständnis, obwohl nicht ganz das Problem beheben . Weil der $ .ajax Aufruf in Spielen passiert.coffee es preppts Spiele/auf die Route beim ersten Eintrag. Noch einmal, bei einem Fehler (nach dem Rendern von 'neu'), wird mir die fehlende Route '/ update_players' nicht mehr vorangestellt. Wenn ich dem Ajax-Aufruf 'games /' hinzufüge, funktioniert es nach dem Fehler, aber nicht beim ersten Eintrag. Das Ändern der Route zu 'get' update_players ', wie' update_players '' gibt mir den Routing-Fehler: 'Missing: Controller-Schlüssel bei der Routen-Definition'. Danke auch, dass Sie das Zitatproblem verstanden haben! – devinruppert
Verwenden Sie 'get 'update_players', um: 'Spiele # update_players' als: 'update_players'' zu beheben' Missing: Controller-Schlüssel auf Routen Definition' –
Das behebt 'Missing: Controller-Schlüssel auf Routen def' und ermöglicht die Route zu arbeiten nach dem Formular übermittelt, aber funktioniert nicht auf den ersten Eintrag mit diesem Fehler: 'ActiveRecord :: RecordNotFound (Konnte Spiel mit 'ID' = update_players nicht finden): app/controllers/games_controller.rb: 10: in' show''. .. Seltsam; nach dem Rendern von 'new' versucht es 'GamesController # show as JS' zu spielen ... Aktualisiert die oben genannte" games_controller.rb "um die show def anzuzeigen. – devinruppert