从Rails向Unity3d WWW.error提供有意义的错误消息

时间:2012-08-29 00:24:35

标签: ruby-on-rails unity3d

我正在学习如何从Unity3d将数据发布到Web服务器,这是为我的游戏创建排行榜的第一步。现在我在Unity中有一个非常简单的脚本,它将名称和分数发布到我的服务器上。 PostScoreURL映射到Rails中的创建操作(作为POST发送时)。它非常简单,但在基础层面上工作。

Unity有一个WWW类,我用它来POST到服务器。此类具有错误属性,但它始终显示为500内部服务器错误;如果成功创建用户或者由于验证问题而未创建用户,则会出现此错误。我想添加到我的Rails应用程序,以便我可以将更有意义的错误消息发送回Unity,以便用户知道发生了什么。例如,如果他们尝试创建已存在的用户,则应通知他们需要使用其他名称。

这是我的代码: Unity脚本:

string PostScoreURL = "http://localhost:3000/users";
string name = "Melanie";
int score = 8732;
WWW www;
bool requestSent = false;

void OnGUI()
{
    if (GUI.Button(new Rect(0, 0, 100, 100),"Post Score"))
    {
        WWWForm form = new WWWForm();
        form.AddField("user[name]", name);
        form.AddField("user[score]", score);

        www = new WWW(PostScoreURL,form);
        requestSent = true;
    }

    if(requestSent && www.isDone)
    {
        print (www.error);
        requestSent = false;
    }
}

来自Rails应用程序: user.rb:

class User < ActiveRecord::Base
    attr_accessible :name, :score
    validates_presence_of :name, :score
    validates_uniqueness_of :name
end

这是我的创建动作:

def create
    @user = User.new(params[:user])
    @user.save
end

我想将相关的错误消息发回Unity。例如:缺少用户名,缺少分数,用户名。

1 个答案:

答案 0 :(得分:1)

您不应该将业务规则错误视为连接错误,也就是说,应该在服务器端处理这些错误,并向客户端返回“成功“使用您定义的内部错误代码进行响应。

我不知道RoR,它可能让你在响应中定义错误代码,但在我的情况下(不使用RoR),我们创建了一个带有错误代码的响应类,该错误代码被序列化并返回给客户端。之后,WWW类调用将验证错误代码的解析器。此外,WWW会监视WWW.error上的连接错误。