Как я могу обновить промежуточную таблицу в рельсах, используя флажки? - PullRequest
0 голосов
/ 31 января 2012

Я не уверен, как это выяснить, потому что я не знаю, как бы я обновил свою промежуточную таблицу, не делая delete_all. Или где делать вставки и удаления и т.д. У меня есть три класса:

class User < ActiveRecord::Base
  has_many :players
  has_many :teams, :through => :players 
end

class Team < ActiveRecord::Base
  has_many :players
end

class Player < ActiveRecord::Base
  belongs_to :team
  belongs_to :user
   (contains other columns like, is_captain, has_paid, etc.)
end

Я показываю страницу с флажками, и вы можете выбрать, какими «пользователями» вы хотите быть в вашей команде (из вашей адресной книги). Представьте себе 25 имен, некоторые из которых уже проверены, а другие нет. Как я могу сохранить данные флажков, потому что они могут иметь 3 различных состояния: 1) вставить нового игрока (вставить строку в игрока) 2) удалить игрока из команды (удалить существующего игрока) или 3) ничего не делать (игрок, которого вы не делаете хочу в свою команду)

Проблема, с которой я сталкиваюсь, заключается в том, что когда вы снимаете флажок, то внешний интерфейс не отправляет это на сервер? Есть идеи, как это можно сделать красиво?

1 Ответ

0 голосов
/ 31 января 2012

Не уверен, что это лучший способ сделать это, но он работает, я открыт для рекомендаций по улучшению этого кода

    params[:team][:user_ids] ||= []
    @team = Team.find(params[:team][:id])
    current_players = @team.players
    current_players_user_ids = current_players.collect { |player| player.user_id }
    user_ids = params[:team][:user_ids]
    puts "input ids #{user_ids}"
    #add current_user because checkbox does not pass them in since its 'disabled'
    user_ids << current_user.id

    #delete the current_players that are not in the the received 'checkboxes'
    current_players_user_ids.each do |current_player_user_id|
      unless user_ids.include?(current_player_user_id)
        Player.delete_all(:team_id => @team.id, :user_id => current_player_user_id)
      end
    end

    #iterate through input ids and run 'inserts' on those who are not current-players
    user_ids.each do |user_id|
      unless current_players_user_ids.include?(user_id)
        player = Player.new(:user_id=>user_id, :team_id=>@team.id)
        @team.players << player
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...