2017-05-10 12 views
0

私は趣味と同じように新しいスキルを学ぼうとしています。私は多くのことを学んだが、混乱するものはまだあります。Ruby経由のMongoDBへのHTML形式

私はMongoDBにDB = phoneを設定し、collection = recordsに電話ディレクトリを推測しているように格納しています。私はJSONファイルを作成し、すべてをインポートし、すべてうまくいった。

次にRuby/Sinatraアプリを作成して、データを表に表示しました。それも素晴らしい作品です。

ここで、HTMLフォームを使用して新しいユーザーをデータベースに送信したいと考えています。テストのための私の基本的な形は、私はAJAXを経由してこれを実行しようとしているが、それたので、(私は、「「=アクションを残している、次の通りであるとmyTest.html

<form id="form"> 
    First name:<br> 
    <input type="text" name="fname" value="Mickey"> 
    <br> Last name:<br> 
    <input type="text" name="lname" value="Mouse"> 
    <br><br> 
    <input type="submit" value="Submit" id="commit"> 
    </form> 
    <script> 

としてシナトラpublicディレクトリにありますこれは私のAJAXの試みだった)動作しませんでした:私はこれが動作することを確認した

get '/myTest' do 
result = Record.collection.insert_one({ :fname =>"Justin"}) 
end 

:私のRubyファイル、phone.rbで

<script> 
    $(function() { 
     $.ajax({ 
     url: 'http://localhost:4567/api/v1/myTest', 
     type: 'post', 
     dataType: 'json', 
     jsonp: 'json', // mongod is expecting the parameter name to be called "jsonp" 
     success: function(data) { 
      //console.log('success', data); 
      console.log("Success"); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      console.log('error', errorThrown); 

     } 
     }); 
    }); 

、私はこれを持っています。私はどのように

localhost:4567/myTest.html?fname=Justin&lname=Smith 

:私は、フォーム上の送信ボタンをクリックすると、私はこのようなURLエンコードされた文字列を取得し、私はこだわっています

は2を接続している(または私もする必要がありますか?)フォームからURLデータを取り出し、それを新しい文書としてMongoに挿入しますか?

私は答えを探していましたが、Webのほとんどすべての情報は、私が使用していないRailsとして戻ってきます。私はまずRubyですべてをやることを学びたい。 Javascript側から問題を見ると、事実上すべての参照がNode.jsを指していますが、これは私が使用していないものです。

助けてください、または少なくとも正しい方向にうなずきます。 おかげ

UPDATE 私は明らかに私のRubyでミスをした - それはPOSTでなければなりません。だから私は、新しいRubyのブロックを作った、と私は、ブラウザから直接アクセスし、ローカルホスト/ API/V1/MYTEST?FNAME =ミッキー& LNAME =マウスを入力すると、それがオン

post '/myTest' do 
fname = params[:fname] 
    lname = params[:lname] 
    Record.collection.insert_one({'fname' => fname, 'lname' => lname}) 
end 

データベースに情報を入力します私は以下を追加しようとしました:

<form id="form" method="POST" action="/myTest"> 
    First name:<br> 
    <input type="text" name="fname"> 
    <br> Last name:<br> 
    <input type="text" name="lname"> 
    <br><br> 
    <input type="submit" value="Submit" id="commit"> 
    </form> 
<script> 
    $(function() { 
     //hang on event of form with id=myform 
     $("#form").submit(function(e) { 

     //prevent Default functionality 
     e.preventDefault(); 

     //get the action-url of the form 
     var actionurl = '/myTest'; 


     $.ajax({ 
      url: actionurl, 
      type: 'post', 
      dataType: 'application/json', 
      data: $("#form").serialize(), 
      success: function(data) { 
      console.log('success') 
      } 
     }); 

     }); 

    }); 
    </script> 

私はRuby/myTestにヒットできません。私は "SinatraはこのDittyを知らない" 404を取得し続けている。私はSinatraを使ってViewsフォルダのHTMLをerbとして作成していないだろうか?私のページはパブリックフォルダにあり、Sinatraから独立して書かれています。

答えて

1

まず、JavaScriptコードではフォームデータは送信されません。つまり、最初に&の姓が表示されます(jQuery $ajax docsを参照)。第二に、POST要求を送信しようとしていますが、SinatraアプリケーションはGETエンドポイントを定義しています。あなたのSinatraアプリケーションがHTMLフォームから送信された正しいデータを受け取ったら、mongo-ruby-driver

+0

ありがとうございます - あなたは正しいです。 RubyをPOSTに更新しました。しかし、私はフォームを提出するとSinatraで404エラーが発生します。 – user2843365

+0

ええと、私は参照してください。あなたのURLが正しいことを確認しましたか? Sinatraエンドポイントのフルパスを 'http:// localhost:3000/api/v1/myTest'のように' actionurl'変数に割り当てることができます。エンドポイントが動作しているかどうかを確認することもできます。郵便配達員またはカール。 – xlts

+0

完全なURLを使用しようとしましたが、動作しませんでした。私はそれを行う方法がわからないので、カールを研究しなければならないでしょう。ヒントをありがとう! – user2843365

0

を使って簡単に新しいレコードを作成することができます。 action = "/ myTest"という形式では、実際には "api/v1/myTest"だったはずです。私がそれを変更するとすぐに、それは働き始めた。

お世話になりました皆様ありがとうございました。感謝します!

関連する問題