• 締切済み

scaffold後のviewの追加

Mysqlでscaffoldを使ってnameとemail列をもったcontactsテーブルを作りました。 モデル名はContactとなっています。ビューにはすでにindex、edit、new、showなるファイルが存在していますが、searchというファイルを追加したいのですが、作成後 http://localhost:3000/contacts/searchにアクセスすると、 Couldn't find Contact with ID=search とエラーになります。scaffoldを使わずマニュアルでmodelとcontrollerを作った場合はこのエラーは出ず任意に作成したファイルにアクセス出来ます. scaffoldを使った場合どのファイルを修正すればよいのでしょうか?

みんなの回答

  • toby_jp
  • ベストアンサー率75% (6/8)
回答No.2

まず、元のエラー内容を張りましょう。 憶測で答えようにも状況がよくわかりません。 (最初から言えよって感じですが、すいません) Project1で問題がでて、Project2では問題ない、となると、 Project1でconfig/routes.rbの以下の記述を削除した、とか、 map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' もしくは、他にconfig/routes.rbの設定を弄ったとか考えられます。 あとは、Project1でsearch.html.erbではなく、search.rbとしておいているとか、おくディレクトリが間違っているとかも考えられます。 エラー内容がわからないのでなんとも >11,12,13行目がエラーとなります。 エラー内容を張っていただかないと… config/routes.rbにて scaffold した方ではあった、 map.resources :contracts の記述がないためとか、いろいろ考えられます。 scaffoldの挙動が全部載っているというわけではないですが、この辺は押さえておいてよいでしょう。 Getting Started with Rails http://guides.rubyonrails.org/getting_started.html あと全般のガイドはここ Ruby on Rails guides http://guides.rubyonrails.org/ あと、ちなみにRailsのバージョンは何でしょうか?

mimzy
質問者

補足

def search end をして、ビューに"テスト"という内容のsearch.html.eb作り として、http://localhost:3000/contacts/searchにアクセスすると Couldn't find Contact with ID=search RAILS_ROOT: C:/NetBeansProjects/Addressbook Application Trace | Framework Trace | Full Trace c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1586:in `find_one' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1569:in `find_from_ids' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:616:in `find' C:/NetBeansProjects/Addressbook/app/controllers/contacts_controller.rb:20:in `show' とエラーになります。 プロジェクトにHTMLを追加するには別にcontrollerとviewを作った方が話が早そうです。 やりたかったことはScaffoldで出来たviewに任意のHMLTファイルを追加したかっただけです。 railsのバージョンは2.3.4です。

全文を見る
すると、全ての回答が全文表示されます。
  • toby_jp
  • ベストアンサー率75% (6/8)
回答No.1

エラー内容を見るに、showのid=searchの状態で呼ばれているのだと思います。 コントローラーに(この場合は、app/controllers/contracts_controller.rbに)、 searchメソッドは追加されましたか?

mimzy
質問者

補足

そう思いcontracts_controller.rbに def search end と空のメソッドを入れてみましたが結果は同じでした。 これよりscaffoldを使用したものをProject1, scaffoldを使用しないものをProject2と呼びます。 私のテストの結果Project2ではメソッドがなくても内容が<%= "search.html" %>のsearch.html.erbは問題なく http://localhost:3000/contacts/search にてアクセスできます。 また、Project1にて作成されたindex.html.erbをProject2で流用すると11,12,13行目がエラーとなります。scaffold使用時に作成されるすべてのファイルを調べればわかる気もしますが、このあたりscaffoldの仕様を詳しく説明したサイトをご存知でしたら教えてください。 -------index.html.erb---------------------- 1<h1>Listing contacts</h1> 2<table> 3 <tr> 4 <th>Name</th> 5 <th>Email</th> 6 </tr> 7<% for contact in @contacts %> 8 <tr> 9 <td><%=h contact.name %></td> 10 <td><%=h contact.email %></td> 11 <td><%= link_to 'Show', contact %></td> 12 <td><%= link_to 'Edit', edit_contact_path(contact) %></td> 13 <td><%= link_to 'Destroy', contact, :confirm => 'Are you sure?', :method => :delete %></td> 14 </tr> 15<% end %> 16</table> 17<br /> 18<%= link_to 'New contact', new_contact_path %> ------------end of index.html.erb--------------------------------

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • RubyOnRailsでエラー

    はじめまして。sakura5205といいます。 今、RubyOnRailsで http://www.thinkit.co.jp/free/article/0605/2/2/ このHPを見ながらアプリケーションを作ろうとしているのですが MySQLでcontactsというテーブルを作ったのにも関わらず、Generatorsでscaffoldを指定して Contactと入れGoすると 「Before updating scaffolding from new DB schema, try creating a table for your model (Contact)」 というエラーがでてしまって困っています。 テーブルは作ってあるので、RadRailsがMySQLと うまく連動していないのかと思っています。 エディターはRadRailsで環境はInstantRailsでインストールしました。 OSはWindowsXPです。 どなたかわかる方いましたら教えてください(><) よろしくお願いします。

  • railsのscaffoldにて作成したプロジェクトの

    railsのscaffoldにて作成したプロジェクトの ViewsのEditのlink_toの第二引数の値がどこで設定されているかわかりません。 例えば、モデル名を"student"にてscaffoldを実行すると、 index.html.erbのEditはこのようになります。 <td><%= link_to 'Edit', edit_student_path(student) %></td> この"edit_student_path"というのが、何者なのかよくわかりません。 どこかで定義されているわけでもなく、動的に生成されているようですが、 仕組みが全くわかりません。 出力されたhtmlの該当部分はこのようになってます。 <a href="/students/1/edit">Edit</a> 現在、scaffoldにて生成したコントローラとビューを一階層掘り下げようとしている所で、出くわした問題です。 controllers/students_controller.rb views/students/index.html.erb ↓ controllers/hoge/students_controller.rb views/hoge/students/index.html.erb どなたかご教授いただけますでしょうか? ちなみにrailsのバージョンは2.3.5です。

    • ベストアンサー
    • Ruby
  • scaffold作成後のviewのみの自動更新

    ぐぐっても答えが出てこないので質問させて下さい。 rails3において、一度scaffoldを作成した後、モデルの内容を変更したとします。 viewの内容は最初作成したモデル構成内容が出力されているままなので、これを変更後の内容に更新したいと考えています。 一度scaffoldをdestroyして、再度新しいプロパティの構成と一緒に作成するのも一つの方法ですが、それだと全体が変更されてしまします。 viewの内容のみ更新できる便利なコマンドはないのでしょうか? もしご存知の方がいらっしゃたら教えて下さい。 よろしくお願い致します。

  • コマンドでフアィルを見つけるとき・・・?

    kouzou@localhost ~]$ su パスワード: [root@localhost kouzou]# cd mysql bash: cd: mysql: そのようなファイルやディレクトリはありません [root@localhost kouzou]# find mysql find: ‘mysql’: そのようなファイルやディレクトリはありません [root@localhost kouzou]# cd / [root@localhost /]# find mysql find: ‘mysql’: そのようなファイルやディレクトリはありません [root@localhost /]# tree -mysql / > allfiles bash: tree: コマンドが見つかりませんでした... [root@localhost /]# find /mysql find: ‘/mysql’: そのようなファイルやディレクトリはありません [root@localhost /]# tree mysql bash: tree: コマンドが見つかりませんでした... 場所から「/」から検索すると200程、出てきました。 どうやったら、コマンドで見つけられますか? ご多忙中、大変恐れ入ります。 ご回答の程、宜しくお願い申し上げます。

  • MYSQLに新しいデータベースの追加

    こんにちは。PHPを使用し、MYSQLに接続、新しいデータベースを追加したいのですが、CREATE DATABASE データベース名で実行をすると Access denied for user ''@'%' to database 'phptest' というエラーが出てしまい、新規データベースを作成することができません。このエラーのよくわからないのところは、localhostにDBの作成時のエラーは'ユーザー名'@'localhost'という感じで出るのに、それ以外で作成しようとすると''@'%'と意味のわからないエラーになってしまいます。これが作成できない理由だと思うのですが、なにかユーザーの追加時等にやらなくてはいけない必要なことが抜けているのでしょうか?お分かりの方おりましたら、ご教授くださいますようお願いいたします。

  • ビューに追加・削除が出来ません。

    皆さん、はじめまして。 今回業務mysqlでデータベースを作成することになりました。 ビューを用いて二つのテーブルに値の追加・削除・更新をしようと試みたのですが、追加、削除が上手くできませんでした。 mysqlのバージョンは5.0.37です。 今回以下のコマンドを実行しました。 1.<cwork1テーブル作成> create table cwork1 (testname1 varchar(255), testname2 varchar(255), primary key(testname1))TYPE=INNODB; primary key(id)); 2.<cwork2テーブル作成> create table cwork2 (r_name1 varchar(255), yakusyoku varchar(255), foreign key(r_name1) references cwork1(testname1) ON DELETE CASCADE ON UPDATE CASCADE )TYPE=INNODB; 3.<cwork1テーブルに追加> insert into cwork1(testname1,testname2) values('山田','太郎'); 4.<cwork2テーブルに追加> insert into cwork2(r_name1,yakusyoku) values('山田','一般'); 5.<ビュー作成> CREATE VIEW testview AS SELECT * FROM cwork1,cwork2 where cwork1.testname1=cwork2.r_name1; この5つを実行後、 <insert実行> insert into testview(testname1,testname2,yakusyoku) values('斉藤','花子','一般'); ERROR 1395 (HY000):Can not modify more than one base table through a join view 'sampledb.testview' <delete実行> delete from testview where testname1='山田'; ERROR 1395 (HY000): Can not delete from join view 'sampledb.testview' というようにinsert、delete文実行時にエラーが帰ってきてしまいます。 原因がわかるかたがいらっしゃいましたらご教授のほうよろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのCREATE VIEWがうまく動作しません。

    SQL初心者です。今回仕事で使う事になり、Win98に MySQL Ver3.23.51をインストールしたのですが、 CREATE VIEW文がうまく動作しません。 例えば MAIN と言うテーブルが存在する時に MySQLプロンプト上で SELECT * FROM MAIN; とやるとちゃんと動作して表示してくれるのですが、 これをTEMPと言うビューを作成したい場合に CREATE VIEW TEMP AS SELECT * FROM MAIN; とやると ERROR 1064: You have an error in your SQL syntax near \'VIEW TEMP AS SELECT * FROM MAIN\' at line 1 と出て来てしまいます。文法的には間違ってないはずなのですが、何がいけないのでしょうか?MySQLはCREATE VIEW文をサポートしていないのでしょうか? 周りに詳しい人間がいないので、原因がわからなくて つまづいています。どうかよろしくお願いします.

  • <アクセスのデザインビューでの設定>

    <アクセスのデザインビューでの設定> こんにちわ。 エクセルで作成したデータをアクセスにインポートして作成したテーブルがあります。 そのフィールドに日にちを入れるところがあります。 2010/7/5と表示されるように,デザインビューで設定しましたが, 「定義されているフィールドが多すぎます」とエラーがでて保存できませんでした。 解決方法はありますでしょうか。 よろしくお願いします!! (行った,設定方法) 1)テーブルをデザインビューで開く。 2)日にちのフィールドのデータ型を「日付/時刻型」へ 3)標準タブの書式を「日付(S)」としました。 4)保存→エラー (アクセスのバージョン)  アクセス98 (PCのOS)XP

  • MySQL5で、SUMした値を新たにカラムとして追加したビューを作成し

    MySQL5で、SUMした値を新たにカラムとして追加したビューを作成したいのですが、どういうSQLを書けばよいかわかりません。 今、Aというテーブルがあり、f1,f2,f3というカラムがあります。 このテーブルを元にvwAというビューを作成したいのですが、その際、f1でGroup Byしたf2のSUMをf2Keiというカラム名で追加し、最終的にf3とf2Keiという2つのカラムを持ったビューにしたいです。 create view vwA as select f3,select SUM(f2) as f2Kei from A GROUP BY f1 from A; と書いてみましたがエラーを返されました。 どのようなSQLを書けばよいか、ご教授ください。

  • apacheで拡張子を省略する方法

    XAMPP 1.6.6a (Apache 2.2.8 + OpenSSL 0.9.8g, MySQL 5.0.51a, PHP 5.2.5 & PHP 4.4.8)を家のPC (Win XP) に入れて,PHPファイルをインターネットで公開する前のテストに使おうと思っています. ネット上では,レンタルサーバを使っており http://www.test.org/data/edit.php?a=b を http://www.test.org/data/edit?a=b と書いても表示されます. 上記ローカル環境では http://localhost/data/edit.php?a=b は表示されるのですが http://localhost/data/edit?a=b が表示されません (Error 404) 少し調べてみて,Options +MultiViews と書いた.htaccess ファイルを,ファイルの入っているのと同じフォルダに入れてみました.そうしたら,それまで表示されなかった http://localhost/data/index?a=b は正しく表示されるようになったのですが, http://localhost/data/edit?a=b は依然として表示されません. 正確に言うと,前は,Error 404 だったのが,上記 .htaccess ファイルを置いたら,変な文字化けのページが表示されたり「ファイルを保存しますか」のメッセージが出たりするようになりました. 他にhttpd.confの中に Options Indexes FollowSymLinks Includes ExecCGI MultiViews と,MultiViewsを追加しましたが,動作が変わった様子はありませんでした. 何か簡単なミスをしているような気がするのですが,それが何なのかわかりません.よろしくおねがいします.