Откат транзакции и не найден шаблон для PlayersController # create, рендеринг head: no_content в rails - PullRequest
0 голосов
/ 27 февраля 2019

В приложении rails я создаю ассоциации has_many между командой и игроками, с консоли я могу сохранить данные, но из браузера я не могу сохранить данные.Значения откатываются и показывают ошибку head no content в журнале.

Очевидно, что при передаче значения из new.html.erb в PlayersContoller произошла ошибка.У меня нет подтверждения в модели игрока.Я новичок, каждое предложение является жемчужиной, пожалуйста, помогите мне с ценным руководством

// rout.rb

Rails.application.routes.draw do    
  resources :teams do
    collection do
      get :load_users
    end
  end

  devise_for :users, controllers: { registrations: 'users/registrations' } 
  resources :user_roles
  resources :roles
  resources :users 
  resources :players
  root   'home#home'
end

// журнал сервера

Started GET "/players/new?team_id=11" for 127.0.0.1 at 2019-02-28 05:11:28 +0530
Processing by PlayersController#new as HTML
  Parameters: {"team_id"=>"11"}
  User Load (0.7ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ /home/sushmitha/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
  Team Load (0.2ms)  SELECT  "teams".* FROM "teams" WHERE "teams"."id" = ? LIMIT ?  [["id", 11], ["LIMIT", 1]]
  ↳ app/controllers/players_controller.rb:4
  Rendering players/new.html.erb within layouts/application
  User Load (0.5ms)  SELECT  "users".* FROM "users" LIMIT ? OFFSET ?  [["LIMIT", 2], ["OFFSET", 0]]
  ↳ app/views/players/new.html.erb:15
   (0.3ms)  SELECT COUNT(*) FROM "users"
  ↳ app/views/players/new.html.erb:34
/home/sushmitha/.rvm/gems/ruby-2.5.1/gems/will_paginate-bootstrap-1.0.1/lib/bootstrap_pagination/bootstrap_renderer.rb:11: warning: constant ::Fixnum is deprecated
  Rendered players/new.html.erb within layouts/application (71.0ms)
  Rendered layouts/_header.html.erb (0.9ms)
  Rendered layouts/_footer.html.erb (0.3ms)
Completed 200 OK in 162ms (Views: 118.0ms | ActiveRecord: 2.7ms)

Started POST "/players" for 127.0.0.1 at 2019-02-28 05:11:31 +0530
Processing by PlayersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"kyrK8LmWKA8E8lBsbQTVi2nVdjCvUkbm/tRjk7aLnRy8TlK93E1bBscmVsG//LC5JrxDBdVvyVMybIGTsf2+vQ==", "player"=>{"team_id"=>"11"}, "players"=>{"user_id"=>["1"]}, "commit"=>"Create Player"}
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ /home/sushmitha/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
  Team Load (0.2ms)  SELECT  "teams".* FROM "teams" WHERE "teams"."id" = ? LIMIT ?  [["id", 11], ["LIMIT", 1]]
  ↳ app/controllers/players_controller.rb:14
   (0.1ms)  begin transaction
  ↳ app/controllers/players_controller.rb:16
   (0.1ms)  rollback transaction
  ↳ app/controllers/players_controller.rb:16
No template found for PlayersController#create, rendering head :no_content
Completed 204 No Content in 79ms (ActiveRecord: 0.8ms)

//user.rb

class User < ApplicationRecord
  has_many :user_roles
  has_many :roles, through: :user_roles, :dependent => :destroy
  # belongs_to :team  ,optional: true, foreign_key: :captain_id    
end

// player.rb

class Player < ApplicationRecord
  belongs_to :team
  belongs_to :user
end

// team.rb

  class Team < ApplicationRecord       
    has_many  :users, dependent: :destroy
    belongs_to :captain, class_name: 'User'
    has_many  :players, dependent: :destroy

    validates :ground_name, presence:true 
    validates :team_name, presence:true 
    validates :captain_id, presence:true, uniqueness:true
  end

// new.html.erb

<div class="col-md-6 col-md-offset-3">
  <div class="container">
    <br>
    <h3>Add players to team <%= @team.team_name %></h3>
      <%= form_for @player do |f| %>
      <table>
        <tbody>
          <%= f.hidden_field :team_id, value: @team.id %>
          <tr>
            <th>Player Id</th>
            <th>Player Name</th>
            <th>Select</th>
          </tr>  
          <% @user.each do |x| %>
            <tr>
              <td><%= x.id %></td>
              <td><%= x.full_name %></td>
              <td><%= f.check_box_tag 'players[user_id][]',x.id %></td>
           </tr>
        <% end %>
        <tr>   
          <td>   
            <%= f.submit nil, class: 'btn btn-primary' %>
            <%= link_to t('.cancel', default:t("helpers.links.cancel")),
                root_path, class:'btn btn-default' %> 
           </td> 
          </tr>
        </tbody>
      </table> 
    <% end %>
  </div>
</div>
<%= will_paginate @user,renderer: BootstrapPagination::Rails, previous_label:"old",next_label: "new", inner_window:1, outer_window:1 %> 

// контроллер игрока

class PlayersController < ApplicationController
        def new
            @player= Player.new
            @team = Team.find(params[:team_id])
            @user = User.all.paginate(page: params[:page], per_page:2)
        end

        def create
            @team = Team.find(params[:player][:team_id])
            params[:player].each do |user_id|
              @team.players.create(user_id: params[:user_id])
            end
        end

private

  def player_params
    params.require(:player).permit(:team_id,:user_id)
  end    
end

В форме есть цикл, который выдает user_id.Как извлечь информацию о пользователе из модели пользователя и присвоить ее форме, на самом деле создает путаницу для меня.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я пытался перебрать символ, и это была ошибка цикла

    def create
        @team = Team.find(params[:player][:team_id])
        params[:users].each do |user|
          @team.players.create(user_id: user)
        end
    end

внес изменения в netw.html.erb со следующим кодом

 <%= check_box_tag 'users[]',x.id %>
0 голосов
/ 28 февраля 2019

Позвольте мне попытаться объяснить, как это должно быть.У вас есть модель Player, которая помогает вам связывать пользователей и команды.Это означает, что это должно быть:

class Team < ApplicationRecord       
  has_many  :players, dependent: :destroy
  has_many  :users, through: :players
end

class User < ApplicationRecord       
  has_many  :players, dependent: :destroy
  has_many  :teams, through: :players
end

Вам не нужна дополнительная строка resources :players в маршрутах или PlayersController.Вам просто нужно обновить команду, чтобы добавить игроков.Если вы хотите сделать это в отдельном представлении, создайте действие add_players в TeamsController.Я приведу пример просмотра стандартных действий new-create / edit-update для TeamsController, я полагаю, у вас уже есть

<%= form_for @team do |f| %>
# here goes all other team fields
  <h3>Add players to team <%= @team.team_name %></h3>      
  <table>
    <tbody>
      <tr>
        <th>Player Id</th>
        <th>Player Name</th>
        <th>Select</th>
      </tr>  
      <% User.all.each do |user| %>
        <tr>
          <td><%= user.id %></td>
          <td><%= user.full_name %></td>
          <td><%= check_box_tag 'team[user_ids][]', user.id %></td>
        </tr>
      <% end %>
    </tbody>
  </table>  
  <%= f.submit "Save", class: 'btn btn-primary' %>
  <%= link_to t('.cancel', default:t("helpers.links.cancel")),
            root_path, class:'btn btn-default' %> 
<% end %>

Также вы должны добавить user_ids: [] в контроллер team_params

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...