所以我在SO的其他问题中查看了这个错误的其他实例,似乎没有任何帮助。因此,我的身份验证系统应该允许企业注册,并允许用户在其业务下注册。但是,我找不到没有身份证的业务""错误。
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.references :company, foreign_key: true
t.timestamps
t.string :first_name
t.string :last_name
t.string :email
t.string :password_digest
t.string :remember_digest
t.string :role
end
class CustomersController < ApplicationController
def new
set_business
@customer = @business.customers.create(user_params)
end
def create
@customer = Customer.new(customer_params)
@customer.save!
session[:customer_id] = @customer.id
redirect_to '/'
rescue ActiveRecord::RecordInvalid => ex
render action: 'new', alert: ex.message
end
private
def customer_params
params.require(:customer).permit(:first_name, :last_name, :business_no, :email, :password_digest, :business_id)
end
def set_business
@business = Business.find (params[:business_id])
end
HTML snippet: Customer.new.html.erb
<h1>Sign Up</h1>
<%= form_for(@customer) do |f| %>
<%= f.label :first_name %>
<%= f.text_field :first_name, :placeholder => "First name" %>
<%= f.label :last_name %>
<%= f.text_field :last_name, :placeholder => "Last name" %>
<%= f.label :email %>
<%= f.email_field :email, :placeholder => "Email" %>
<%= f.label :company_id %>
<%= f.collection_select :business_id, Business.all, :id, :name %>
<%= f.password_field :password_digest, :placeholder => "Password" %>
<%= f.submit "Create Account", class: "btn-submit" %>
<% end %>
class Business < ActiveRecord::Base
has_many :customers
end
class Customer < ActiveRecord::Base
belongs_to :business
end
如何在不收到此错误的情况下定义@business变量,以便用户可以在其业务下注册?我希望他们从表单上的可用公司列表中进行选择,然后在用户注册时将它们链接到数据库中。我究竟做错了什么?我是Ruby的新手,我可能需要一些很好的解释为什么会发生这种情况。
谢谢你的时间:)答案 0 :(得分:1)
你应该看一下params []的内容,因为那里没有简单的:business_id密钥,它嵌套在:customers hash:
将你的set_business更改为这样的想法:
def set_business
@business = Business.find (params[:customer][:business_id])
end
编辑:这不起作用,因为第一次调用new方法时,没有提供params。您应该只获得填写表单的企业列表!
def new
@customer = Customer.new
@businesses = Business.all
end
EDIT2:在创建方法中,您也不需要设置商家,因为它已经由表单设置了!
def create
@customer = Customer.create(customer_params)
@customer.save
end
答案 1 :(得分:0)
更新controller
customers_controller.rb
class CustomersController < ApplicationController
before_action :set_business
def new
@customer = @business.customers.build
end
def create
begin
@customer = @business.customers.new(customer_params)
@customer.save!
session[:customer_id] = @customer.id
redirect_to '/'
rescue ActiveRecord::RecordInvalid => ex
render action: 'new', alert: ex.message
end
end
private
def customer_params
params.require(:customer).permit(:first_name, :last_name, :business_no, :email, :password_digest, :business_id)
end
def set_business
@business = Business.find (params[:business_id])
end
end