この Rails 3.2 アプリケーションは正常に動作しています。以下の手順に従ってRolifyをインストールしました。
gem "rolify"
Gemfileに追加する- 走る
bundle install
- 走る
rails g rolify:role
- 新しい移行、新しいファイル、および変更されたファイル (上記のコマンドによって生成/変更された) を確認します。
- 走る
rake db:migrate
この時点で、ユーザーを作成/編集しようとすると、次のエラーが発生します。
NoMethodError in UsersController#create
undefined method `user_id' for #<User:0x007f8f21f168e8>
Rolify をインストールする前は、すべて正常に動作していたので、問題は Rolify にあることに注意してください。
問題の移行、新しいファイル、および変更されたファイルは次のとおりです。
新しい移行:
class RolifyCreateRoles < ActiveRecord::Migration
def change
create_table(:roles) do |t|
t.string :name
t.references :resource, :polymorphic => true
t.timestamps
end
create_table(:users_roles, :id => false) do |t|
t.references :user
t.references :role
end
add_index(:roles, :name)
add_index(:roles, [ :name, :resource_type, :resource_id ])
add_index(:users_roles, [ :user_id, :role_id ])
end
end
新しいモデル:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource, :polymorphic => true
end
変更されたモデル:
class User < ActiveRecord::Base
rolify
has_secure_password
has_many :issues
acts_as_tenant(:client)
attr_accessible :email, :password, :password_confirmation, :username
validates :username, presence: true,
length: { within: 4..50 },
format: { with: /(?:[\w\d]){4,255}/ }
validates_uniqueness_to_tenant :username, case_sensitive: false
validates :email, presence: true,
uniqueness: { case_sensitive: false },
length: { within: 8..255 },
format: { with: /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i }
validates :password, presence: true, on: :create,
confirmation: true,
length: { within: 4..255 }
validates :password_confirmation, presence: true, on: :create
# NOTE: Used by SimpleForm to display the dropdown proerply
def to_label
"#{username}"
end
end
プロジェクトの残りのファイルは、Github リポジトリにあります。
エラーがどこから来たのか、誰にも手がかりがありますか?