undefined 方法 'users' for nil:NilClass



我正在尝试创建一个具有域和用户的应用程序,有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字段,用户将被分配到正确的域

相关内容

最新更新