2017-02-24 5 views
0

コントローラを使用してデータベースにテーブルを作成しましたので、このcreate_tableコントローラアクションが呼び出され、モデルを使用していません。レールで特定のpostgresデータベースからテーブル名をフェッチする方法

今、私はモデルを作成する必要があります特定のデータベースからテーブル名をフェッチしたいですか?またはそれを行う方法?

私はかなりレールに新しいです、私は多くを検索し、この質問を投稿した私は満足のいく答えを得ていません。

これは私のコントローラの動作です。

def create_table  

    require 'pg' 

    begin 

    con = PG.connect :dbname => 'testdb', :user => 'abcd', :host => 'xyz' 

    con.exec "DROP TABLE IF EXISTS Cars" 
    con.exec "CREATE TABLE Cars(Id INTEGER PRIMARY KEY, 
     Name VARCHAR(20), Price INT)" 

    rescue PG::Error => e 

    puts e.message 

    ensure 

    con.close if con 

    end 
end 

答えて

0

あなたはrailsに新しいしている場合、(例えばhttp://guides.rubyonrails.org/command_line.htmlから始まる)のガイドの一部を介して動作することをお勧めします。これは、手作業でデータベースを操作しようとするよりもはるかに良いスタートを与えるでしょう。レールの大きな利点の1つ(そして、その外で作業するときに最も痛感するもの)は、データベースの移行のコンセプトです(例:this article on ActiveRecordに概要が記載されています)。

基本的には、モデルを作成した結果としてテーブルを作成する方法を学習します。ジェネレータを使用して新しいモデルを作成することもできますし、初心者としてscaffoldジェネレータを使用することもできます。

rails generate scaffold HighScore game:string score:integer 

これは(ActiveRecord::Base由来)Modelクラス、HighScoreテーブルを作成するためのデータベースの移行、それを操作するためのHighScoreController対象と定期的なCRUD操作用ページのセットを生成テンプレートのホストを生成します。 (すなわち、Create,Read,Update,Delete)である。

ユーザの操作によってテーブルをオンザフライで作成するのは通常の方法ではありませんが、開発環境での移行によってテーブルを作成します。これにより、適切な時期にプロダクションに移行することができます。 DDL-SQLのハックビットよりも(ライブ)データベースの構造と対話する方がはるかに良い方法です。

+0

ありがとう@Patru –

+0

よろしくお願いいたします。 stackoverflowで "ありがとう"と言って最も受け入れられる形式は、答えを受け入れることです。 – Patru

+0

ボタンをクリックするたびにテーブルを作成してDBに作成するので、上記の方法を使用していますが、今は必要です私はモデルを作成してテーブル名をフェッチできるかどうかを知るために? @Patru –

0

あなたはActiveRecordのモデルとすることなく、DBからテーブル名を取得したい場合 - SQLを使用します。

#for pg 
tables = con.exec("SELECT table_name FROM information_schema.tables WHERE table_schema='public'").to_a 

それはあなたが作成したテーブルのリストを返します。

+0

私は今それをやっています@idejありがとう –

+0

私はブラウザからすべてのテーブル名を表示するために、コントローラからテーブルを渡す必要があります。何をすべきか ? –

+0

コントローラのアクションで '@ tables 'などの変数を' @'で定義することができます。このアクションビューでは '@ table'として利用可能になります。これは' <%= @tables%> ' – idej

関連する問題