在搜索和find_by中从Mysql到Mongodb的代码更改

时间:2013-04-29 04:58:24

标签: ruby-on-rails ruby ruby-on-rails-3 mongodb mongoid

这是我的类别控制器

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>

这里我想从搜索中选择catogory的名称时保存数据库中的类别ID。

上面的代码是Mysql的工作代码 我想为Mongodb数据库更改它。我正在使用Mongoid。 我应该改变哪个部分在Mongodb工作..

1 个答案:

答案 0 :(得分: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's installation instruction