2009-04-14 10 views
0

申し訳ありませんが、いくつかのRailsの人々からアドバイスとベストプラクティスが必要です。Rails + MySqlベストプラクティスを使用したWebサービス

私はかなり新しいプラットフォームですが、以前はJavaでデータベースバックアップされたWeb開発作業を行ってきました。この時点で、私は約20のチュートリアルを通して作業しました。そして、私は同じ場所で邪魔され続けています。

ここでは私がやったことと私が経験していることがあります。私は反映するために、私はMySQLの中で私のスキーマとテーブルを作成した、と私はレールのアカウントを作成した(RAILS_ROOT/pass1234)とのconfig/databases.ymlの更新

rails my_rails_app 

を使用して新しいアプリケーションを作成しました新しいアカウント:

ruby script/generate scaffold customer 

正常に返さ:この時点で

development: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: demo_development 
    username: rails_root 
    password: pass1234 
    host: localhost 

は、私は「顧客のテーブルのための足場を生成します。したがって、サーバーを起動します。

ローカルマシンのポート3000でMongrelを起動し、サーバーを正常に起動します。ブラウザをhttp://localhost:3000/customersにした後、ページには「顧客を表示する」と正しく表示されますが、にはと記載されたフィールドがありません。 「新規顧客」のリンクを押すとまだのフィールドはありませんが、空の顧客レコードを作成することができます。この操作では、すべてのフィールドにNULL値が設定されているため、実行しようとしたSQLクエリでは、 'name'カラムをnullにすることはできません。

私はその時点で自分のフィールドをピックアップしていると主に混乱しています、なぜそれが以前に表示されていないのですか?明らかに、それは正しいデータベースに接続しており、正しいテーブルを特定しています。どうしたんだ?

今のところ、サーバーを起動する前にテーブルにエントリを配置すると、「顧客の表示」ヘッダーの下に「表示」、「編集」、および「破棄」リンクオプションが表示されるようになりました。ただし、フィールドやデータは反映されません。 「破棄」をクリックすると、表のレコードが実際に破棄されます。しかし、エラーメッセージでない限り、レールで生成されたWebページのレコードやフィールドはまだ見ていません。

これは私の生成足場コマンドから出力された:

\ROR\my_app>ruby script/generate scaffold contact 
     exists app/models/ 
     exists app/controllers/ 
     exists app/helpers/ 
     create app/views/contacts 
     exists app/views/layouts/ 
     exists test/functional/ 
     exists test/unit/ 
     create test/unit/helpers/ 
     exists public/stylesheets/ 
     create app/views/contacts/index.html.erb 
     create app/views/contacts/show.html.erb 
     create app/views/contacts/new.html.erb 
     create app/views/contacts/edit.html.erb 
     create app/views/layouts/contacts.html.erb 
     create public/stylesheets/scaffold.css 
     create app/controllers/contacts_controller.rb 
     create test/functional/contacts_controller_test.rb 
     create app/helpers/contacts_helper.rb 
     create test/unit/helpers/contacts_helper_test.rb 
     route map.resources :contacts 
    dependency model 
     exists app/models/ 
     exists test/unit/ 
     exists test/fixtures/ 
     create app/models/contact.rb 
     create test/unit/contact_test.rb 
     create test/fixtures/contacts.yml 
     create db/migrate 
     create db/migrate/20090414185634_create_contacts.rb 

そして、ここでは主要なファイルが生成されます。

アプリの\コントローラ\ contacts_controller.rb

class ContactsController < ApplicationController 
    # GET /contacts 
    # GET /contacts.xml 
    def index 
    @contacts = Contact.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @contacts } 
    end 
    end 

    # GET /contacts/1 
    # GET /contacts/1.xml 
    def show 
    @contact = Contact.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @contact } 
    end 
    end 

    # GET /contacts/new 
    # GET /contacts/new.xml 
    def new 
    @contact = Contact.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @contact } 
    end 
    end 

    # GET /contacts/1/edit 
    def edit 
    @contact = Contact.find(params[:id]) 
    end 

    # POST /contacts 
    # POST /contacts.xml 
    def create 
    @contact = Contact.new(params[:contact]) 

    respond_to do |format| 
     if @contact.save 
     flash[:notice] = 'Contact was successfully created.' 
     format.html { redirect_to(@contact) } 
     format.xml { render :xml => @contact, :status => :created, :location => @contact } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @contact.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /contacts/1 
    # PUT /contacts/1.xml 
    def update 
    @contact = Contact.find(params[:id]) 

    respond_to do |format| 
     if @contact.update_attributes(params[:contact]) 
     flash[:notice] = 'Contact was successfully updated.' 
     format.html { redirect_to(@contact) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @contact.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /contacts/1 
    # DELETE /contacts/1.xml 
    def destroy 
    @contact = Contact.find(params[:id]) 
    @contact.destroy 

    respond_to do |format| 
     format.html { redirect_to(contacts_url) } 
     format.xml { head :ok } 
    end 
    end 
end 

アプリ\ビュー\ contacts \ index.html.erb

<h1>Listing contacts</h1> 

<table> 
    <tr> 
    </tr> 

<% @contacts.each do |contact| %> 
    <tr> 
    <td><%= link_to 'Show', contact %></td> 
    <td><%= link_to 'Edit', edit_contact_path(contact) %></td> 
    <td><%= link_to 'Destroy', contact, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 
</table> 

<br /> 

<%= link_to 'New contact', new_contact_path %> 

アプリ\ビュー\連絡先\ show.html.erb

<%= link_to 'Edit', edit_contact_path(@contact) %> | 
<%= link_to 'Back', contacts_path %> 

アプリ\ビュー\連絡先\ new.html.erb

<h1>New contact</h1> 

<% form_for(@contact) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', contacts_path %> 

アプリ\ビュー\連絡先\ edit.html。erb

<h1>Editing contact</h1> 

<% form_for(@contact) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.submit 'Update' %> 
    </p> 
<% end %> 

<%= link_to 'Show', @contact %> | 
<%= link_to 'Back', contacts_path %> 

これ以上のアドバイスをいただければ幸いです。

+0

あなたの足場が正しく生成されなかったようです。作成したコードを投稿できますか? –

+0

絶対に。私はそれによって生成されたソースを投稿しました。 "show.html.erb"はそれほど役に立ちません! ありがとうございました。何かがあなたに飛び出したら教えてください。 –

答えて

1

Railsは、スカフォールドが作成された時点でスカフォールドに作成するビューのフィールドを追加するだけです(つまり、 "script/generate scaffold post title:string body:text published:boolean")。これにより、問題のテーブルのデータベース移行が作成されます。道)。スキャフォールディング中にデータベースの検査はしていないと思いますが、私は足場生成コードを掘り下げずに絶対に確信しています。

0

連絡先モデルの移行を作成しましたか?

Railsはデータベースから直接フィールドを読み取り、テーブルに存在するものに基づいて属性を動的に生成します。スカフォールドジェネレータを実行するだけであれば、移行はまだ空です。マイグレーションが書かれたら、rake db:migrateでマイグレーションを実行することができますし、フィールドが足場に現れるはずです。

しかし私は足場に触れてから非常に長い時間がかかりました。彼らは、IMHOです。あなたがRailsを最初に学んでいて、その使用ができるだけ早く放棄されなければならないときにのみ役に立ちます。

関連する問題