0

MongoDB は初めてで、Array-Field-Type の使用方法がわかりません。

だから私は自分のモデルで作成しました

field :admins, type: Array

このフィールドには、モデルの「管理者」であるすべての user_id を保存したいと考えています。しかし、このフィールドを設定しようとすると、配列に情報が保存されず、ID を持つ文字列が単純に作成されます。そして、管理者だけが私のフィルター機能を編集できるという私の制約のために

def check_if_admin
  unless Agency.find(params[:id]).admins.include?(current_agent.id)
    flash[:notice] = "Only possible as Admin."
    redirect_to root_path
  end
end

というエラーが発生します

"can't convert Moped::BSON::ObjectId into String"

だから私は自分のフィールドを ID を持つ配列として作成定義で開始しようとしました:

@agency.admins = [current_agent.id]

これは配列内の 1 人のユーザーのトリックですが、このフィールドに ID を追加するにはどうすればよいですか?

編集フォームに入ると:

<%= form_for(@agency) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :admins %><br />
    <%= f.text_field :admins %>  <br />
  </div>          
  <div class="field">
    <%= f.label :agents %><br />
    <%= f.text_field :agents %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

別の User_ID を手で入力すると、再びエラーに戻ります。誰でもそれを回避する方法を知っていますか?

助けてくれてありがとう!

4

1 に答える 1

0

このメッセージは、ある時点で、ObjectId があるはずの場所に文字列を保存したことを意味します。Ruby は current_agent.id (ObjectId) と params[:id] (文字列) を比較しようとしています。

配列にプッシュする前に、フォームの text_field からの入力を ObjectID に変換していないようです。

admins フィールドから入力を取得し、ObjectId を次のようにします。

BSON::ObjectId.new(string_representing_admin_id)

admins フィールドはコンマで区切られた admin _ids の配列であり、生成された ObjectId の代わりにユーザー名など、操作が非常に面倒なため、操作が簡単な _id 値を使用していると思います。

その場合、おそらく入力を分割して削除し、マップ/選択を使用して ObjectIds の配列を作成します。

レールでこのようなユーザー名を表示する選択フィールドを使用する方がはるかに簡単でしょうか?

とにかく、さらにヘルプが必要な場合は、コレクションからいくつかのサンプル ドキュメントを表示してください。

于 2012-09-04T19:53:59.693 に答える