1

私はレールにかなり慣れていないので、Devise User モデルに belongs_to 関連付けを追加しようとしています。ビューをレンダリングしようとしたときに発生するエラー:

Devise/registrations の NoMethodError#edit 未定義のメソッド `department_id' for #

このエラーは、ビューの collection_select で発生しています。このメソッドは、belongs_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

4 に答える 4

2

@njordenが述べたように、必ず次のことを行ってください。

  1. 移行しdepartment_idて users テーブルに追加します
  2. attr_accessible :department_id編集登録フォームを介して一括割り当てを許可する
于 2011-08-15T03:06:13.877 に答える
0

それは後ろ向きです。協会の側にcollection_select適しているでしょう。has_manyここでのセマンティックヒントは、オブジェクトがbelongs_to別のオブジェクトである場合、それは特異であることに注意してください。関係するコレクションはありません。あなたdepartmentは1つのオブジェクトを要求して取り戻します。反対の方向から、あなたDepartmentがその時に設定されている場合has_many :users、ユーザーを求めることはあなたにユーザーのリストを与えるでしょう。

ドキュメントをご覧selectください。彼らはあなたが部門でやろうとしていることの簡単な例を示します(ブログ投稿の著者を選ぶという形で)。

于 2011-01-21T17:12:17.407 に答える
0

私のケースを追加するだけで、私は同様の問題を抱えていました。最初は各ユーザーにdepartment_idを持つ部門がありましたが、その後、has_manyに移動し、ユーザーからdepartment_idを削除するのを忘れました。解決策は、ユーザーからdepartment_idを削除することでした。

于 2011-09-16T13:49:34.417 に答える
0

これは本当にうまくいくはずです。私は自分のデバイスの User モデルに belongs_to :business を持っており、同様の collection_for_select がうまく機能します。私が考えることができる唯一のことは、移行が実行されておらず、まだ user.department_id 列がないということですか?

于 2011-01-21T17:28:33.423 に答える