楷模:
class User < ActiveRecord::Base
belongs_to :role, :polymorphic => true
class Admin < ActiveRecord::Base
has_one :user, :as => :role
class Dealer < ActiveRecord::Base
has_one :user, :as => :role
class Buyer < ActiveRecord::Base
has_one :user, :as => :role
经销商控制器:
def new
@dealer = Dealer.new
respond_to do |format|
format.html
format.xml { render :xml => @dealer }
end
end
def create
@dealer = Dealer.new(params[:dealer])
respond_to do |format|
if @dealer.save
flash[:notice] = 'Dealer was successfully created.'
format.html { redirect_to [:admin, @dealer] }
format.xml { render :xml => @dealer, :status => :created, :location => @dealer }
else
format.html { render :action => "new" }
format.xml { render :xml => @dealer.errors, :status => :unprocessable_entity }
end
end
end
错误信息:
ActiveRecord::AssociationTypeMismatch in Admin/dealersController#create User(#41048900) 预期,得到 HashWithIndifferentAccess(#23699520)
请求参数:
{"authenticity_token"=>"+GkeOOxVi1Fxl7ccbV0Ctt5R6shyMlF+3UWgRow2RdI=",
"dealer"=>{"gender"=>"m",
"forename"=>"",
"surname"=>"",
"company"=>"",
"address1"=>"",
"address2"=>"",
"zipcode"=>"",
"city"=>"",
"country"=>"1",
"user"=>{"email"=>"",
"password"=>""},
"phone"=>"",
"mobile"=>"",
"fax"=>""},
"commit"=>"Submit"}
我想我的问题是 Rails 不会将请求哈希中的“用户”哈希转换为用户对象——但是为什么以及如何让 Rails 这样做呢?