如何将用户定义类的输出重定向到rails中查看

时间:2012-01-30 05:48:51

标签: ruby-on-rails ruby

我面临以下问题。

我在rails中制作一个朴素的贝叶斯性别预测算法。为此我编写了它并将我的代码文件放在根目录中。我能够在我的模型控制器中访问该类,并通过适当调用类来运行代码。

我有一个包含三个字段“体重,身高和性别”的表单,当我填写所有这三个字段时,它们应该保存在数据库中。我写了它的逻辑,它运作良好。如果我遗漏了性别字段,它应该运行我的代码并呈现适当的视图。

在控制器的创建动作中,我正在执行以下操作:

def create
    @user = User.new(params[:user])
    if @user.gender.blank?
       @b_obj= Bayes.new
       @b_obj.predict(@user[height], @user[weight]).
    else
      if @user.save
        redirect_to @user
      else
        @title = "Train"
        render 'new'
      end
    end
  end

此代码效果很好。现在我遇到了问题,如何将我的代码结果(第一个if语句)重定向到一个视图以及在哪里创建它。我的代码返回“male”或“female”作为输出。我应该将它存储在某个变量中吗?我应该怎么做呢?

这是我项目中剩下的最后一件事。在尝试了很多方法后,我已经解决了这个问题,但现在我陷入了僵局。

此致 阿伦

2 个答案:

答案 0 :(得分:0)

您可以为名为“gender_predicted”的用户对象添加一个额外的布尔属性,该属性将指示是否预测或指定了用户的性别集:

@user.gender = @b_obj.predict(@user[height], @user[weight])
@user.gender_predicted = true

这将允许您存储您的预测,只需运行一次。然后,您可以以相同的方式处理所有用户,但仍允许您跟踪预测的使用位置。

答案 1 :(得分:0)

def create
    @user = User.new(params[:user])
    @user.gender ||= Bayes.new.predict(@user[height], @user[weight])
    if @user.save
      flash[:notice] = 'User saved'
      redirect_to @user
    else
      @title = "Train"
      render 'new'
    end
end