Разработать контроллеры рельсов - PullRequest
4 голосов
/ 28 декабря 2010

Я использую Rails 3, на ruby ​​1.8.7. И использую для аутентификации. разработать (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, но на моих маршрутах у меня есть devise

devise_for :users

Ответы [ 2 ]

15 голосов
/ 28 декабря 2010

Вы можете создать подкласс 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

Если вы хотите настроить представления Devise, упакованные в Gem, вы можете запустить следующую команду, чтобы сгенерировать файлы представлений для вашего приложения:

rails generate devise:views

Вам также необходимо указать маршрутизатору использовать ваш новый контроллер; что-то вроде:

devise_for :users, :controllers => { :registrations => "my_registrations" }
6 голосов
/ 28 декабря 2010

Нет никакой необходимости вовлекать контроллер в это;модели могут (и должны) выполнять всю тяжелую работу здесь.

Я предполагаю, что у вас есть связь между моделями User и Profile, и в этом случае вы должны просто иметь возможность выполнятькак то так:

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
...