我正在尝试创建一个具有域和用户的应用程序,有3种类型的用户,超级管理员,域管理员和域用户。用户(3种类型)在users表中,域在domain表中。目前有域名和超级管理员。超级管理员可以登录并创建域和域用户。域用户应该涉及到一个特定的域(我有一个"domain_id"列在我的"用户"表)。现在,当我试图在一个域下创建一个用户(选择一个域后),我得到这个错误"未定义的方法'用户'为nil:NilClass"。
我的用户控制器
def new
@domain = Domain.find(params[:id])
@user = User.new
@title = "Sign up"
end
def create
@user = @domain.users.build(params[:user])
if @user.save
flash[:success] = "Welcome to My Space!"
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
我的用户模型有。
belongs_to:域
验证:domain_id,:presence => true
而领域模型有。
has_many:用户
My new.html.erb form
<%= form_for @user do |f| %>
<%= f.label :first_name %>
<%= f.text_field(:first_name, :size => 20) %>
<%= f.label :last_name %>
<%= f.text_field(:last_name, :size => 20) %>
<%= f.label :email %>
<%= f.text_field(:email, :size => 20) %>
<%= f.label :password %>
<%= f.password_field(:password, :size => 20) %>
<%= f.label :password_confirmation, "Verify Password" %>
<%= f.password_field(:password_confirmation, :size => 20) %>
<%= f.submit "Create" %>
<% end %>
假设new
方法中的@domain = Domain.find(params[:id])
做了它应该做的事情:
def new
@domain = Domain.find(params[:id])
@user = @domain.users.build
@title = "Sign up"
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to My Space!"
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
你的视图应该是这样的:
<%= form_for @user do |f| %>
<%= f.hidden_field :domain_id %>
<%= f.label :first_name %>
<%= f.text_field(:first_name, :size => 20) %>
<%= f.label :last_name %>
<%= f.text_field(:last_name, :size => 20) %>
<%= f.label :email %>
<%= f.text_field(:email, :size => 20) %>
<%= f.label :password %>
<%= f.password_field(:password, :size => 20) %>
<%= f.label :password_confirmation, "Verify Password" %>
<%= f.password_field(:password_confirmation, :size => 20) %>
<%= f.submit "Create" %>
<% end %>
由于表单中隐藏的domain_id
字段,用户将被分配到正确的域