在发布验证错误Rails 4

时间:2016-03-20 17:35:29

标签: ruby-on-rails ajax ruby-on-rails-4 routing coffeescript

我根据其他选择字段中的选择动态更新我的表单字段。第一次进入时一切正常。虽然,在提交带有验证错误的表单并使用渲染“新”后,我收到了路由错误。我在资源上面添加了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"):

下面发布的解决方案

2 个答案:

答案 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

感谢Зелёный让我沿着正确的道路前进