我正在尝试创建一个具有域和用户的应用程序,有3种类型的用户,超级管理员,域管理员和域用户。所有用户(3种类型)都在域表和域表中的域中。目前有域名和超级管理员。超级管理员可以登录并创建域和域用户。域用户应该与特定域相关(我的'users'表中有一个“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 =>真正
和领域模型有
has_many:用户
我的new.html.erb表单
<%= 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 %>
答案 0 :(得分:1)
假设@domain = Domain.find(params[:id])
方法中的new
做了它应该做的事情:
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
字段,系统会将用户分配到正确的域。