0

これは私のカテゴリーコントローラーです

class CategoriesController < ApplicationController
  def index
    @categories = Category.order(:name).where("name like ?", "%#{params[:term]}%")
    render json: @categories.map(&:name)
  end
end

これは私のカテゴリモデルです

class Category < ActiveRecord::Base
  has_many :products
end

これは私の製品モデルです

class Product < ActiveRecord::Base
  belongs_to :category

  def category_name
    category.try(:name)
  end

  def category_name=(name)
    self.category = Category.find_by_name(name) if name.present?
  end
end

私のproduct.js.coffee

jQuery ->
  $('#product_category_name').autocomplete
    source: $('#product_category_name').data('autocomplete-source')

製品の私のフォームは

 <div class="field">
    <%= f.label :category_name %><br />
    <%= f.text_field :category_name, data: {autocomplete_source: categories_path} %>
  </div>

ここでは、検索からカテゴリの名前を選択したときに、カテゴリの ID をデータベースに保存したいと考えています。

上記のコードは、Mongodb データベース用に変更したい Mysql の作業コードです。私はモンゴイドを使用しています。Mongodbで動作させるには、どの部分を変更する必要がありますか..

4

1 に答える 1

1

MongoDB を使用している場合は、モデルのクエリ方法を変更する必要があります。この線:

@categories = Category.order(:name).where("name like ?", "%#{params[:term]}%")

SQL 固有です。次のように、MongoDB/Mongoid で読み取り可能なものに変換する必要があります。

@categories = Category.where({:name => /#{params[:term]}/}).order_by(name: 1)

また、ActiveRecord を Mongoid に置き換える必要があります。Mongoid を ODM として使用している場合は、 Mongoid のインストール手順を参照できます。

于 2013-04-29T05:09:25.087 に答える