日経ソフトウエア2007.11の佐藤聖規さんの記事そのままに進めたつもりですが、
(ただし、eclipseやInstantRailsをインストールするときに、C:直下ではなくて、
D:の中にフォルダを作りました)
途中までは特に問題なくできていると思うのですが、最後のアプリケーション作成で
ジェネレータ・ビューでscaffoldを選択しtodoを実行すると、エラーします。
error Before updating scaffolding from new DB schema, try creating a table for your model (Todo)
localhost:3000 のサーバへの接続を確立できませんでした。
こうした開発の基本的な知識は全くありません。
よろしくアドバイスください。
Scaffoldの対象であるModelに対応するテーブルが作られてなさそうですね。
InstantRailsに付属しているphpMyAdminか何かでテーブルが作られているかどうか確認してください。またdatabase.ymlの設定に間違いはないか、書式は間違っていないかも確認してください。
テーブルが作られていなければ、eclipse(Radrailsでしょうか)のメニューからModelジェネレータを起動してModelを作成ください。
cmdから入力する場合は下記のようになります。
ruby script/generate model todo
db/migrate以下にmigrationファイルが作成されるので、下記のように記述します。(適宜、カラム名を変更してください。)
def self.up create_table :todos do |t| t.column :foo, :string t.column :hoge, :string end end
つぎにrake db:migrateと打ち込んでテーブルを作成します。そのとき、MySQLサーバを起動し忘れないようにしてください。
これでテーブルが作成されるので、あとはScaffoldを実行するだけです。
情報を少し整理しますね
InstantRailsは常に起動してあるようなので、MySQLが起動していない等の初歩的な問題ではなさそうですね。
phpMyAdminを起動した後、画面左の選択エリアからToDoManager_developmentを選択しても、schema_infoしか表示されない場合にはテーブルが生成されていません。
正しくテーブルが作成されていればphpMyAdminの左メニューに
ToDoManager_development(2)
■schema_info
■todos
と表示されます。よってtodosテーブルが作成されていません。
これが原因です。RailsはMigrationにてテーブル構造のバージョン管理をしますが、そのMigration用のファイルには特に問題ないようです。
def self.down drop_table :todos end
あたりが抜けているような気がしますが、大した問題ではないですね。とするとrake db:migrateでテーブルが作成されるはずですが、実際出来ていないので、途中の手順でエラーが発生していると思われます。rake db:migrateの実行時にエラーメッセージは出ていませんか?
エラーが出ていれば、原因は恐らくToDoManager_developmentというデーターベースを作成する際に名前の綴りを間違えたか、作られていないかどちらかのケースに当てはまると思います。
今一度確認をしてみてください。
ありがとうございます。
まだ内容を追試確認できていないので、回答できません。今夜チェックします。
佐藤様から画像入りで教えていただいたのがあるので、これを確認してみます。
なお、途中まで同じようなのですが、何を間違えたのか、私のは違っているので………
id:hathiさん
日経ソフトウェアの記事を書いていた佐藤です。
エラーメッセージとid:kent0608さんのやり取りを見る限り、"todosテーブルが作成できていない"の可能性が高いと思われます。
以下を確認していただいてもいいでしょうか?
-----
1.migrateの方法ですが、以下の画像のように入力しているか確認してください。
クリックすると最大化します。
成功すると、以下のようなログがコンソールビューに出力されます。
== Todos: migrating =========================================================== -- create_table(:todos) -> 0.0930s == Todos: migrated (0.0930s) ==================================================
2.続いて、phpMyAdminを起動してください。
正常にデータベースが作成できていれば、左フレームから"ToDoManager_development"が選択できるはずです。
選択すると以下の画面が表示されます。
クリックすると拡大します。
上の画像の丸で囲まれた部分をクリックすると、作成したテーブルの構造を確認できます。
そこでid,limit,title,detailが表示されるか確認してください。
クリックすると最大化します。
----
参考までに私がtodoテーブルを作成せずに、scaffoldを実行したときのコンソールログをはりつけます。
exists app/controllers/ exists app/helpers/ exists app/views/todos exists app/views/layouts/ exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/todo.rb identical test/unit/todo_test.rb identical test/fixtures/todos.yml error Before updating scaffolding from new DB schema, try creating a table for your model (Todo)
佐藤様 恐縮です。現在の環境が追試できないので、今夜確認してみます。
なお、トップの画像はそのままできていますが、後を記憶していないので、……… (すみません)
申し訳ありません。(私にはわかっていないのです)
tableができているか]について
EclipseのRadRailsのRailsナビゲータには、ToDoManagerが表示され、その中にdb\migrate\001_todos.rbと表示されています。
日経ソフトウエアの記事には、テーブル作成が成功すると、「001_todos.rb」というファイルが作成されると書いてあるので、tableはできたのだと思っています。(できていないのでしょうか?)
また、このファイルを編集して、現在は次のコードを記載した状態になっています。
class Todos < ActiveRecord::Migration
def self.up
create_table(:todos) do |table|
table.column(:limit,:timestamp)
table.column(:title,:string)
table.column(:detail,:text)
end
end
def self.down
end
end
日経ソフトウエアの記事では、[次にRakeタスクビューでdb:migradeを選択実行するとtodosテーブルが作成される]と書いてあります。
実行すると、Eclipseのコンソールに<終了>migrate[internal launch]rake(日時)が表示されます。
kent0608の回答にある『そのとき、MySQLサーバを起動し忘れないように』の意味が私にはわかっていません。
なお、Eclipseを立ち上げる前に、Instant Railsは立ち上げてあって、画面では、MySQLの右にStartedと表示されています。
日経ソフトウエアの記事に『常にInstantRailsを起動しておいて』と書かれていたので、Eclpiseを起動している間は常にInstantRailsを起動状態でおいています。
Instant RailsのphpMyAdminを表示させるとテーブルという表記の下にschema_infoと表示されます。テーブルができているのか、何をどう見れば良いのかわかりません。
EclipseのRailsナビゲータのToDoManager\config\environments\database.ymlを見ると、次のようになっていました。
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
#
# Install the MySQL driver:
# gem install mysql
# On MacOS X:
# gem install mysql -- --include=/usr/local/lib
# On Windows:
# gem install mysql
# Choose the win32 build.
# Install MySQL and put its /bin directory on your path.
#
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
adapter: mysql
database: ToDoManager_development
username: root
password:
host: localhost
# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
adapter: mysql
database: ToDoManager_test
username: root
password:
host: localhost
production:
adapter: mysql
database: ToDoManager_production
username: root
password:
host: localhost