所以我有这个问题试图找出如何在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
答案 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指南页面上阅读有关此内容的更多信息。