首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3.2 + Rolify:安装Rolify后应用程序中断(Bug?)

Rails 3.2 + Rolify:安装Rolify后应用程序中断(Bug?)
EN

Stack Overflow用户
提问于 2012-07-24 18:24:49
回答 1查看 450关注 0票数 0

我的此Rails 3.2应用程序运行良好。我按照以下步骤安装了罗林

  1. gem "rolify"添加到Gemfile中
  2. 运行bundle install
  3. 运行rails g rolify:role
  4. 检查新迁移、新文件和修改过的文件(由上面的命令生成/修改)。
  5. 运行rake db:migrate

此时,我尝试创建/编辑一个用户,并得到以下错误:

代码语言:javascript
复制
NoMethodError in UsersController#create

undefined method `user_id' for #<User:0x007f8f21f168e8>

注意,在我安装Rolify之前,一切正常,所以问题来自Rolify。

下面是迁移、新文件和修改过的文件:

新移民:

代码语言:javascript
复制
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

新模式:

代码语言:javascript
复制
class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true
end

修改后的模式:

代码语言:javascript
复制
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回购中找到项目中的其余文件。

有人知道这个错误是从哪里来的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-24 22:52:05

发生此错误是因为acts_as_tenant (错误地)正在为User模型上的user_id字段创建验证。如果在rails c中运行这段代码,您可以看到这个验证器。

代码语言:javascript
复制
 User._validators

我建议切换到公寓 gem,它似乎比acts_as_tenant更易于维护。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11637000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档