2

私はWeb開発に少し慣れていないので、Ruby on Rails(3.2.9)でプロジェクトを始めようとしています。したがって、JavaScriptなしでRoRができることについて少し混乱しています...たとえば、Rails Scaffoldを使用する場合、コントローラーの新しいメソッド(コントローラーの新しいメソッド)にアクセスしてデータベースに新しいレコードを作成することは問題ありません。次に、createメソッドを呼び出して、レコードをデータベースに保存します)ここで、ビューを使用せずに新しいレコードを作成したいと思います。「ユーザーがボタンを押す->レコードが保存される」のようなものです。例を示します(これは私の研究に必要です。実際のプロジェクトではありません...)

すべての記事を表示するビューがあり(railsは足場記事を生成します)、記事名と利用可能な量を表示する「購入方法」へのリンクを追加しました。以下に、顧客が購入したい商品の金額を選択できるフィールドがあります。

<p>
  <b>Name:</b>
  <%= @article.name %>
</p>

<p>
  <b>Available:</b>
  <%= @article.stocks %>
</p>

<%= form_for(@article) do |f| %>

 <div class="field">
    <b>How many?</b>
    <br />
    <%= f.number_field :amount %>
  </div>
<% end %> 

ここで、記事の名前と選択した金額を注文アイテムのようなものに変換するイベントを発生させるリンク(またはより適切なボタン)を追加したいと思います。つまり、order_itemテーブルにレコードを作成します。

<td><%=link_to "Ja", :controller => "oderItem", :method => "create" %></td><br>

今、私はそれをどのように行うことができるかについて混乱しています。私は、次のようなことを行うControllerのcreate-Method(または任意のメソッド)だけを使用することを考えました。

def match

    @apo = OrderItem.new(:amount :2, ...)
    @apo.save
end

しかし、これは私をコントローラーの新しい方法またはそのようなsthに連れて行ってくれるようです。

だから、この説明(おそらく私の知識のレベルを明らかにするかもしれません...)で、私がレールで本当に間違ったことをしているのか、それともこれにjavascriptを使用する必要があるのか​​を誰かに教えてもらえますか?

いくつかのサンプルコード(Railsおよび/またはJS用)が最も高く評価されます!(シンプルにしてください。Ajaxなどは最先端ですが、これを実行したいだけです:-))...このようなプロジェクトをRailsに表示するだけのコードサンプルへのリンクもあります(単に:- ))とてもいいですね!

4

2 に答える 2

1

Ruby on RailsはJavascriptに依存していないため、RubyとRailsを学ぶためにJavascriptを知る必要はありません。

質問の1つに答えるにはlink_to method、呼び出しようとしているアクションではなく、「POST」、「GET」、「PUT」、「DELETE」などのHTTPメソッドを参照します。:actionコントローラ内のどのアクション(メソッド)に移動するかを指示するために使用する必要があります。

RubyとRailsを使い始めることができる場所がいくつかあります。

  • コードスクール-コードスクールにはいくつかの無料コースがあり、そのうちの1つはRubyonRailsで非常に優れたコースです。
  • コードアカデミー-コードアカデミーはコードスクールよりも構造化されており、さまざまなWeb開発テクノロジーに関する多くのコースを提供しています。
  • Railscasts -Railscastsは、Railsチュートリアルの無料ビデオがいくつかある素晴らしいサイトです。

たぶん何人かの人々はより多くの情報源について詳しく説明することができます。また、Githubには多くのオープンソースプロジェクトがあり、人々がRubyとRailsをどのように使用しているかを見て感じてみることができます。

于 2012-12-04T21:23:49.210 に答える
1

ユーザーが特定の要素をクリックしたときに「ミニ」フォームを表示するようにページレイアウトを変更するには、新しいビューをレンダリングするか、JavaScriptを使用して現在のドキュメントを変更する必要があります。

JavaScriptを介してフォームを表示することを選択した場合、このビューコードがどのように表示されるかを簡略化したバージョンを次に示します。

ERB:

# rendering each available article...
<% @articles.each do |article| %>

  <p>
    <b>Name:</b>
    <%= article.name %>
  </p>

  <p>
    <b>Available:</b>
    <%= article.stocks %>
  </p>

  <% button_tag(:type => 'button', :class => 'buy-btn', data-article-id="article.id") do %>
    <strong>Buy Me!</strong>
  <% end %>

  # for each article, create a mini form with which
  # the user can buy n of said article...
  <div class="field hidden-item" id="form-#{article.id}" >
    <%= form_for(OrderItem.new do |f| %>   
      <b>How many?</b>
      <br />
      <%= f.number_field_tag :amount%>
      <%= f.submit %>    
    <% end %> 
  </div>
<% end %>

CSS:

.field {
  display: none; //hides the div from all browsers by default
}

すべてを結び付けるのに役立つJavaScript:

$(document).ready(function() {
  //... other js code

  // bind all elements with the css class 'buy-btn' to 
  // a click event...
  $(".buy-btn").bind('click', function() {
      var id = $(this).data('article-id');
      $("#form-" + id).slideDown(); // shows the selected element with a nice slide down effect
  });

  //... other js code

});

そのため、ERBでは、各記事に入力と送信を待機しているミニフォームを提供します。フォームはCSSでデフォルトで非表示になっており、ユーザーが[購入する]をクリックすると表示されます。問題の記事のボタン。

このアプローチは、フォーム宣言を少し移動し、OrderItemsController.createアクションで適切に処理することにより、ユーザーが希望するさまざまな記事を注文できるように少し調整することもできます。

フォームの送信ボタンをクリックすると、デフォルトでページがリダイレクトされることに注意してください。それはおそらく、始めたばかりのときにそのままにしておきたい方法ですが、慣れてきたら、:remote => true送信タグで使用して、AJAXを介してバックグラウンドでフォームを送信できるようにする方法を確認してください。

JavaScriptをまったく使用せずにそれを本当に実行したい場合は、CSSを使用して非常に高度な作業を行うか、特定のフォームを表示するように指示するパラメーターをビューに渡すリンクをリグする必要があります。 。これは次のようになります。

# rendering each available article, as before...
<% @articles.each do |article| %>

  <p>
    <b>Name:</b>
    <%= article.name %>
  </p>

  <p>
    <b>Available:</b>
    <%= article.stocks %>
  </p>

  # ... but now set up a link that passes a param to the controller...
  <%= link_to( 'Buy Me!', "/articles?article=#{article.id}" ) %>

  # which we then use to render a form on the page if the id in the
  # 'article' param matches the id of the article we are currently
  # rendering...
  <% if params[:article] && params[:article] == article.id %>

    <%= form_for(OrderItem.new do |f| %>   
      <b>How many?</b>
      <br />
      <%= f.number_field_tag :amount%>
      <%= f.submit %>    
    <% end %> 
  </div>
<% end %>

これは正確ではないかもしれませんが、正しい方向を示していることを願っています。

于 2012-12-04T21:56:34.330 に答える