用户在rails中注册后构建对象

时间:2013-09-01 23:23:22

标签: ruby-on-rails devise

所以我有这个问题试图找出如何在rails中使用build方法创建一个对象,一旦用户完全注册并仍然将该对象连接到用户id。我正在使用设计进行身份验证,需要创建的模型称为“app”。

这是“app”的创建方法。

 def create
  @app = App.new(app_params)
  @app.id = current_user.id

    respond_to do |format|
      if @app.save
        format.html { redirect_to @app, notice: 'Application successfully created.'}
      else
        format.html { render action: 'new' }
      end
    end
  end

我收到此错误: 找不到ID = 1的应用

来自我的多步骤控制器:

def show
       @user = User.find(current_user)
          case step
        when :school, :grades, :extra_activity, :paragraph, :submit
        @app = App.find(current_user)
      end
        render_wizard
      end

2 个答案:

答案 0 :(得分:1)

代码中的问题行在这里:

@app.id = current_user.id

设置ActiveRecord对象的id是禁忌。可以想象id属性就像在C中使用指针一样。系统会为您创建它,您可以使用它来引用唯一的模型对象。

你可能想要的是:

@app.user_id = current_user.id

或者,甚至更好:

@app.user = current_user

为此,您需要在App模型和用户模型之间建立关联。有一个很好的教程here.

答案 1 :(得分:1)

您需要在User模型中进行after_create回调。混淆AppController是没有意义的,因为没有为应用程序填写任何表单而且你没有app_params。

class User < ActiveRecord::Base
  after_create :build_initial_app

  protected

  def build_initial_app
    self.create_app
  end
end

您可以在ActiveRecord Callbacks的Rails指南页面上阅读有关此内容的更多信息。