Неопределенный метод в модели пользователя devise - PullRequest
1 голос
/ 21 января 2011

Я довольно новичок в рельсах и пытаюсь добавить ассоциацию own_to в мою модель Devise User. Ошибка, которую я получаю при попытке визуализации представления:

NoMethodError в Devise / registrations # edit неопределенный метод `Department_id 'для #

Эта ошибка происходит в коллекции collection_select на мой взгляд. Разве этот метод не предоставляется ассоциацией own_to?

Модель пользователя

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable, :lockable and :timeoutable
  devise :invitable, :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  belongs_to :department
end

Редактировать вид

%h2
  Edit #{resource_name.to_s.humanize}
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f|
  = devise_error_messages!
  %p
    = f.label :email
    %br/
    = f.text_field :email
  %p
    = f.label :department
    %br/
    = collection_select(resource_name, :department_id, Department.all, :id, :name)
  %p
    ...

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Как упомянуто @njorden, обязательно выполните следующие действия:

  1. выполните миграцию, чтобы добавить department_id в свою таблицу пользователей
  2. attr_accessible :department_id, чтобы разрешить массовое назначение через редактированиерегистрационная форма
0 голосов
/ 16 сентября 2011

Просто, чтобы добавить мой случай, у меня была похожая проблема.Изначально у каждого пользователя был отдел с идентификатором отдела_, затем я перешел к has_many и забыл удалить идентификатор отдела у пользователя.Решением было удалить отдел_ид с ​​пользователя.

0 голосов
/ 21 января 2011

Это действительно должно работать, у меня есть модель own_to: business на моей модели User devise, и аналогичный collection_for_select прекрасно работает.Единственное, о чем я могу думать, это то, что, возможно, ваши миграции еще не запущены, и у вас еще нет столбца user.department_id?

0 голосов
/ 21 января 2011

Это выглядит задом наперед.collection_select подходит для has_many стороны ассоциации.Обратите внимание, что семантическая подсказка заключается в том, что когда объект belongs_to другой объект, он является единичным.Там нет коллекции участвует.Вы просите department и получаете обратно один объект.С другой стороны, если ваш Department был установлен на has_many :users, тогда запрос о пользователях даст вам список пользователей.

Взгляните на документы для select.Они дают простой пример того, что вы пытаетесь сделать с отделами (в форме выбора автора для записи в блоге).

...