1v1游戏系统导轨

时间:2014-12-27 18:45:39

标签: ruby-on-rails ruby-on-rails-4

我是Rails的初学者,所以请耐心等等。哈哈。我想在Rails中创建一个1v1类型的匹配系统。我尝试创建的过程在下面列出了我尝试过的当前代码。

  1. 允许用户创建游戏。
  2. 允许其他用户加入该游戏。
  3. 如果两个用户在一场比赛中,则不允许其他人加入。
  4. 匹配模型:

    class Match < ActiveRecord::Base
    belongs_to :user
    

    匹配控制器:

    class MatchesController < ApplicationController
    
    before_filter :find_match, only: [:show, :join]
    
    def index
        @matches = Match.all
    end
    
    def new
        @match = Match.new
    end
    
    def create
        @match = current_user.matches.new(match_params)
    
        if @match.save
            redirect_to root_url, notice: 'created.'
        else
            render('new')
        end
    end
    
    def join
        if @match.update_attributes(:opponent_id => current_user.id)
            redirect_to root_url, notice: 'joined.'
        else
            render('new')
        end
    end
    
    private
        def find_match
            @match = Match.find(params[:id])
        end
        def match_params
            params.require(:match).permit(:user_id, :opponent_id)
        end
    

    用户模型:

    class User < ActiveRecord::Base
         has_many :matches
    

    匹配迁移:

        create_table :matches do |t|
        t.string :match_title
        t.integer :user_id
        t.integer :opponent_id
        t.boolean :joinable
      t.timestamps
    

    谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码有一些小错误。在&#39;加入&#39;你应该改变条件的方法:

def join

    if @match.joinable
        @match.update_attributes(:opponent_id => current_user.id, :joinable => false)
        redirect_to root_url, notice: 'joined.'
    else
        render('new')
    end
end

并添加一行以创建&#39;方法:

def create
    @match = current_user.matches.new(match_params)

    @match.joinable = true

    if @match.save
        redirect_to root_url, notice: 'created.'
    else
        render('new')
    end
end

现在,用户无法加入已经有2名玩家的比赛。