我是Rails的初学者,所以请耐心等等。哈哈。我想在Rails中创建一个1v1类型的匹配系统。我尝试创建的过程在下面列出了我尝试过的当前代码。
匹配模型:
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
谢谢。
答案 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名玩家的比赛。