我根据其他选择字段中的选择动态更新我的表单字段。第一次进入时一切正常。虽然,在提交带有验证错误的表单并使用渲染“新”后,我收到了路由错误。我在资源上面添加了update_players的路由(见下文)。我相信我的路线有问题。
这是我的参考:https://kernelgarden.wordpress.com/2014/02/26/dynamic-select-boxes-in-rails-4/
配置/ routes.rb中:
...
get 'games/update_players', as: 'update_players'
resources :games
...
raked routes:
...
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
资产/ Javascript角/ 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
视图/游戏/ update_players.js.coffee:
$("#players-select").empty()
.append("<%= escape_javascript(render(:partial => "players_in_group_list")) %>")
在创建“渲染”后,这是我收到的错误:
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"):
答案 0 :(得分:2)
根据您的路线,ajax
中的网址应为:
update_players = ->
$.ajax 'games/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
或改变您的路线:
get 'update_players', to: 'games#update_players' as: 'update_players'
AJAX:
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
同时修正引号:
$("#players-select").empty().append("<%= escape_javascript(render(:partial => 'players_in_group_list')) %>")
答案 1 :(得分:0)
我需要为ajax网址使用绝对路径。因为我在我的ajax网址中使用了相对路径'update_players'
,所以rails在新操作上添加games/
,但在创建操作上没有。{1}}。路线保持不变。
更新资产/ javascripts / games.coffee:
update_players = ->
$.ajax '/games/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
感谢Зелёный让我沿着正确的道路前进