2011-07-18 10 views
57

レールで作業しているように見える人から、時には「足場を使わない」ということを学んだことのある重要な教訓を読みました。また、私はこの方向からのヒントを読んでいます。 私の質問は、なぜそれについて悪いことは何ですか?そしてnifty_scaffoldingも悪いですか?Ruby on Railsの専門家が足場を使用しないのはなぜですか?

デフォルトでは、私たちのアプリケーションのフィールド名を誰かに公開し、攻撃に対してより脆弱にするコントローラアクションのxmlバージョンを生成するので、悪いことでしょうか?

足場をしない理由は何ですか?

+0

私はすべての答えを育てましたが、使用することを決定したときに「足場を使わないでください」と言っても十分な理由がありません。 – alex

答えて

68

私は軌道に慣れていますが、私の最終目標はシンプルなCRUDアクションにはほど遠いため、足場を使用することはめったにありません。しかし、足場を使わないという厳しいルールはありません。実際に足場の文字どおりであるため、一部のコーダはそれに眉をひそめます。完成品ではありません。 足場は、実際の製品を構築する際にサポートします。「スキャフォールディング」についてgoogle imagesを検索すると、そのアイデアが得られるはずです。

scaffoldは多くの組み込みのgenerators in Railsのいずれかに過ぎません。 Railsジェネレータは、単に汎用コードを出力するスクリプトです。ジェネレータは非常に便利な救済手段であり、あなた自身のカスタムニーズのためにすぐにあなた自身を見つけるでしょう。writing generators

6

架台は実際にプロダクション用に使用されていません。これは、アプリケーションを迅速にブートストラップすることを意味しています。その後、変更または削除することができます。

のRails 3の足場は、実際にはかなりまともですが、それはまだネストされたリソースを処理するための方法のようにいくつかのことを欠いており、それが必要とされない冗長性や歓迎を奨励している、respond_toオーバー(respond_with単純なを使用していません)。

デフォルトのスカフォールドフォームは修正されていない可能性があります。おそらく、user_idのようなデータベースの列に変換されるモデル間の関係があります。リレーションシップを持つモデルの足場を作成するとき、この列は、URLから推測されるか、別のよりユーザーフレンドリーなインターフェースを介して選択されるべきときに、フォームのテキストフィールドとして表示されます。

このような細かいことがたくさんあるため、足場を使ってすぐに使えるコードのために足場を立てることはほとんどありません。しかし、足場を生成してギャップを埋めることで、必要のない領域を掃除することで、アプリケーションを構築できます。ほとんどのRails開発者は、これをある程度行っていると思います。

+0

大丈夫スカイフォールディングが作成するコードを変更する必要があることは明らかですが、私はスキャフォールディングの潜在的な危険性や不利な点にもっと興味を持っていました。 – tmaximini

+0

他のフレームワークでは、セキュリティ上の懸念があるかもしれません。しかし、Railsの足場はかなり安定しているので、足場に依存することを除いて実際には「危険」はありません。 – coreyward

3

私は2つの理由で足場を使用していない:

  • Railsの足場は、HTMLのテーブルですべてのものを置く - 私はその
  • のように私はそこに私の管理ページのためrails_admin宝石を使用することを好みません足場コードの90%は必要ありません。

あなたのxmlの懸念は、人々が足場の使用を奨励する理由ではありません。私はあなたのアプリが生成しなければならないルートの数を倍にするので、私のページのXMLバージョンでは気にしません。

+1

レールを習っている間に足場をつけたPS-スティックは、あなたが知る必要がある量を削減し、あなたのアプリを起動してより速く走らせるのに役立ちます。あなたが何をしているのかが分かれば、自然に発電機の運転を停止します。 – stephenmurdoch

+1

出力フォーマットは、コントローラ内の小さなコードで処理されます。 JSONとXMLはRailsによってネイティブにサポートされているため、ビューは必要ありません。あなたのルートはフォーマットのために全く変わっていません( '' rake routes'を実行し、すべてのルートの終わりに暗黙の ''(。:format)を参照してください)。 – coreyward

+0

ええ、もっと正確であると思われるのでnifty_scaffoldingも使用します – tmaximini

12

私はプロダクションコードを書くためのテスト駆動開発アプローチを好むので、ほとんどの専門家は足場を避けると信じています。つまり、失敗したテストを最初に書き、そのテストに合格するコードを書きたいということです。これは強力なコードを生成する優れた方法ですが、非常にきめ細かいレベルで最適に動作します。足場は一度にあまりにも多すぎると思われるので、特定の機能のテストに失敗し、その特定の機能を通過させるコードを記述するのが難しいです。足場の使いやすさを超えてその習慣に入ることがより重要になるかもしれません。

この足場は、それ自体がかなり強力です。

0

私は足場が新しいレールのバージョンの新しいものをチェックするのは非常に良いと思っています(例えば、レール4の場合、コントローラーのparams許可のもの)。高速プロトタイプ作成に使用できます。 多くの場合、足場を完全に生成する必要はありません。

2

これまでのところ、経験豊富なレールプログラマーはスキャフォールディングを使用していないと主に理由があります。私は初心者も足場を使わないことを提唱する。

あなたは足場を使って楽しい時間を過ごしていたかもしれませんし、投稿モデルにpublishedブール値フィールドを含めるのを忘れてしまったので、テーブルに属性を追加するための移行を生成しますそれを解決することができました)。あなたはまた、足場が生産したフォームにそれをどのように追加するかを検討しなければなりません。 あなたの人生の間あなたはあなたのフォームを提出したときにそれが更新されていない理由を理解することができず、多くの分裂と時間を無駄にした後、あなたは足場のようなその属性他人。 Railsの動作については、実際には分かっていません。

Railsを学んでいるなら、MVCについては、V and Cを自分で構築した方がはるかに理解できます。

+0

「Railsの仕組みについて本当に知っているわけではありません。 – suzumakes

7

レールが足場を生成することを理解し、その限界に注意することが重要です。スキャフォールディングは、何かを素早く実行して前提をテストするのに役立ちます。しかし、現実の世界では、あなたをあまりにも遠くにさせません。足場を使ってモデルを作成したとします。

素晴らしいです!今すぐプロトタイプを用意しました。しかし今、別のフィールド「著者」を追加しなければならないとします。

rails generate migration add_to_article_author author:string 
rake db:migrate 

今、テーブルの記事は、新しい列を持っていますが、ファイル内の/アプリ/ビュー/記事は、あなたが再び

rails generate scaffold Article title:string author:string body:text --skip-migration 
を足場を実行すると、フォームがなど著者のフィールドを持っていないであろう。すなわち、同じ古い状態にあります

今回は--skip-migrateを追加しました。これはこれまでに行われていたため、同じテーブルを再度移行する場合にRailsが本当に不平を言うからです。 Scaffoldは最初に作成したファイルを上書きするように指示します。上書きすると、コントローラ/app/controllers/article_controller.rbに行った変更や、/app/views/article/show.html.erbやindex.html.erbのようなファイルの表示も破棄されます

価値のあるRailsアプリカスタムコードを持っています(スキャフォールドで作成された定型コードではありません)。Railsプログラマは、アイデアをテストするために足場を使うべきです。足場を使ってあなたのクライアントに遊ぶものを与えてください。しかし、現実の世界では、定型的な足場コードは使用されていません。

関連する問題