首先,我是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做错了什么?还是有更好的方法来实现这一点(没有创建表)?或者只是更好的方式?
答案 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