如何在Rails 4中注册时为用户分配预先存在的角色?

时间:2016-08-29 04:02:13

标签: ruby-on-rails associations roles

首先,我是Rails的新手,所以如果这很长,我会道歉。我创建了一个像网站这样的工作板,它有两种类型的用户:发布工作的公司和能够申请工作的求职者。由于它是一对多关系,我试图遵循Railscasts'嵌入式协会:http://railscasts.com/episodes/189-embedded-association我在哪里:

击:

rails generate migration add_role_to_users role:string
rake db:migrate

模型/ user.rb

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


  ROLES = %w[admin company user]

  def role_symbols
    [role.to_sym]
  end
end

用户/ new.html.erb:

<p>
  <%= f.label :role %><br />
  <%= f.collection_select :role, User::ROLES, :to_s, :humanize %>
</p>

由于某种原因,f.collection_select没有将角色添加到User表中的角色列。当我进入Rails控制台时,新创建的用户就在那里,但角色是&#34; nil&#34;。我尝试使用Rolify gem,但它没有提供很多关于如何使用表单添加预先确定的角色的说明。我的另一个想法是,如果我创建一个角色模型并手动添加角色,那么当我在制作中上传时,不会删除所有记录(角色)吗?所以,我的问题是:

我是否在使用f.collection_select做错了什么?还是有更好的方法来实现这一点(没有创建表)?或者只是更好的方式?

1 个答案:

答案 0 :(得分:0)

我找到了答案。是的,我需要在控制器中允许:角色,但由于我使用设计,事情有点不同,这是我不知道的。所以这就是:

控制器/ application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  before_action :configure_devise_permitted_parameters, if: :devise_controller?

  protected

  def configure_devise_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:role])
  end
end