Multisite Rails / Jruby站点有ActiveRecord :: AdapterNotSpecified数据库配置没有指定适配器问题

时间:2014-07-28 22:31:05

标签: ruby-on-rails database jruby multi-database

尝试根据下拉菜单更改网络应用程序模式。我有一种感觉,我不是在拉下选择。

型号:

class MyApp < ActiveRecord::Base 
def initialize(dbase)
 @dbase = fdbase
 if @dbase == 'DB01'
   ActiveRecord::Base.establish_connection"#{Rails.env}"
 else
   ActiveRecord::Base.establish_connection"#{Rails.env}_#{@fc}"
end
end
end

控制器:

class MyAppController < ApplicationController
before_filter :initialize_remote_user

   def self.search(name)
     @results = MyApp.search(params[:name])
     @dbase = params[:dbase].inspect
     c = MyApp.new(@dbase)
     result = c.last 
    end

   def result
     c = MyApp.new(@dbase)
     result = c.last
     @results =  MyApp.where("name = ?",params[:name]).order("item_scan_date ASC")
     puts @results.inspect
   end


   def update
    @results = MyApp.Where(name: name_params)
    @dbase = params[:dbase].inspect
    end

   def change
     @results = MyApp.Where(name: name_params)
     @dbase = params[:dbase].inspect
     end

   def show
    @dbase = params[:dbase].inspect
    c = MyApp.new(@dbase)
    result = c.last
   end

   def create
   end

   def new
   end

   def index
     @dbase = params[:dbase].inspect
     c = MyApp.new(@dbase)
     result = c.last
   end

  private

  def name_params
     params.require(:name).permit(:name)
  end

  def dbase_params
     params.require(:dbase).permit(:dbase, :id)
  end

end

下拉列表位于我的导航栏上,并在_nav.html.erb中输入:下面是_dbform.html.erb

<div id="float_right">
<%= form_for @dbase do |f| %>
<%= f.select( :dbase, options_for_select([['DB01','DB01'],['DB02','DB02'],['DB03','DB03'],['DB04','DB04']])) %>
<% end %>

</div>

database.yml生产和开发是一样的。

# Uses RubyGem-activerecord-jdbcsqlite3-adapter

development:
  adapter: mysql2
  host: myhost
  database: DB01
  encoding: utf8
  port: 3306

development_DB2:
  adapter: mysql2
  host: myhost
  database: DB02
  encoding: utf8
  port: 3306

development_DB3:
  adapter: mysql2
  host: myhost
  database: DB03
  encoding: utf8
  port: 3306

development_DB4:
  adapter: mysql2
  host: myhost
  database: DB04
  encoding: utf8
  port: 3306

我不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

而不是控制器代码,看到错误的实际反向跟踪可能会更有用...因为从那个可以找出AR和AR-JDBC版本,无论如何作为盲目尝试这个:

if @dbase == 'DB01'
  ActiveRecord::Base.establish_connection "#{Rails.env}".to_sym
else
  ActiveRecord::Base.establish_connection :"#{Rails.env}_#{@dbase}"
end

...使用符号+ @dbase似乎是我们需要的变量