0

モデル:

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 がリクエスト ハッシュ内の "user" ハッシュを User オブジェクトに変換しないことだと思います。

4

1 に答える 1

8

このスレッドにぶつかるなど、これに数時間を費やしました。最終的に別のフォーラムで見つかりました:属性セッターは、この形式でパラメーターを取得することを期待しています

{ ...,
  "user_attributes" => {"email" => "", "password" => ""},
  ... }

いいえ

{ ...,
  "user" => {"email" => "", "password" => ""},
  ... }

これを取得するには、ビューは次のようになります。

form_for @dealer do |f|
 ...
 f.fields_for :user, @dealer.user do |u|
   ...
 end
 ...
end

これはRails 3.0.3でうまくいきます

于 2011-02-11T21:33:39.263 に答える