1

私の Rails アプリには、ジョーカーとダンサーの 2 つのモデルにポリモーフィックに接続されたユーザー名モデルがあります。

Joker を作成するとき、form は Joker のユーザー名である文字列を送信します。ユーザー名のARオブジェクトの代わりに文字列を受け取ったときにレールがエラーをスローしないように、これを設定するにはどうすればよいですか?

ここに私が今持っているコードがあります。

class Joker < ActiveRecord::Base
  attr_accessible :username

  has_one :username
end

そしてJokers_controllerの作成で

@joker = Joker.new(params[:joker])

Rails は次のエラーをスローします。

Username(#19110) expected, got String(#9130)

これがフォームフィールドです

= form_for @joker do |f|
  - if @joker.errors.any?
    #error_explanation
      h2 = "#{pluralize(@joker.errors.count, "error")} prohibited this joker from being saved:"
      ul
        - @joker.errors.full_messages.each do |message|
          li = message


  = f.text_field :username
4

2 に答える 2

1

username問題は、Rails がUsernameクラスのインスタンスであると想定しているときに、テキスト フィールドとして渡しているためです。私がすることは、モデルを持つのではなく、競合するユーザー名について他方をチェックするとモデルUsernameの両方で検証を行うことです。これは簡単です:DancerJoker

 class Dancer < ActiveRecord::Base
   validate :unique_username

   # your model code goes here

   private

     def unique_username
       if Joker.find_by_username(username)
         errors.add(:username, "is already taken")
       end
     end
  end

Usernameしたがって、モデルと関連テーブルを削除し、両方にusername文字列フィールドのみを追加して、モデルでこの検証を行います。dancersjokers

于 2012-10-30T21:19:32.317 に答える
0

アプリケーションをmongodbに切り替えることで問題を解決しました。

于 2012-11-25T19:38:32.990 に答える