4

我在 ruby​​ 1.8.7 上使用 Rails 3。并用于身份验证。设计(1.1.3)。但这是我正在构建的一个相当大的社区网站,所以我有一个个人资料表和一个用户表。每次用户注册时,它也应该生成一个配置文件,但在设计中我不允许使用控制器,所以我完全迷失了..

编辑

现在它说

undefined method `getlocal' for Tue, 28 Dec 2010 11:18:55 +0000:DateTime

然后,当我使用此代码在 lib 中创建一个名为 date_time.rb 的文件时

class DateTime
  def getlocal
    "it works"
  end
end

并在我的应用程序控制器中要求它给了我这个

fail wrong number of arguments (1 for 0)

就像它不再知道任何称为设计的东西,但在我的路线中,我确实有设计

devise_for :users
4

2 回答 2

15

您可以继承 Devise RegistrationsController 并在 create() 方法中添加您自己的逻辑,并为其他所有内容调用父类方法。

class MyRegistrationsController < Devise::RegistrationsController
  prepend_view_path "app/views/devise"

  def create
    super
    # Generate your profile here
    # ...
  end

  def update
    super
  end
end

如果您想自定义打包在 Gem 中的 Devise 视图,那么您可以运行以下命令来为您的应用程序生成视图文件:

rails generate devise:views

您还需要告诉路由器使用您的新控制器;就像是:

devise_for :users, :controllers => { :registrations => "my_registrations" }
于 2010-12-28T12:43:38.473 回答
6

实际上没有必要让控制器参与其中。模型可以(并且应该)在这里完成所有繁重的工作。

我假设您在UserProfile模型之间存在关系,在这种情况下,您应该能够执行以下操作:

class User < ActiveRecord::Base
  has_one :profile # could be a belongs_to, but has_one makes more sense

  after_create :create_user_profile

  def create_user_profile
    create_profile(:column => 'value', ...)
  end
end
于 2010-12-28T15:57:13.017 回答