2012-12-04 47 views
2

我不太喜歡web開發中的新功能,並嘗試使用Ruby on Rails(3.2.9)開始項目。 所以,我有點困惑RoR可以做什麼沒有JavaScript或不... 例如使用Rails腳手架,通過訪問控制器的新方法創建新記錄在數據庫中沒有問題(然後調用create方法並將記錄保存到數據庫) 我現在想創建新記錄而不使用視圖。 只是像「用戶點擊一個按鈕 - >保存記錄」 我給你舉個例子(我需要爲我的研究,it's不是真正的生命工程...)Ruby on Rails:在沒有JavaScript的情況下創建數據庫條目

我有一個觀點其中顯示了我所有的文章(導軌生成腳手架文章),現在添加了一個鏈接到「購買方法」,它顯示了文章的名稱和可用數量。低於 的地方有一個顧客可以選擇他想購買的物品的數量的領域。

<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> 

現在我很困惑我該怎麼做。 我想到只用創造 - 這確實有點像控制器的方法(或方法):

def match 

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

但這似乎只是使我控制器或某事像的新方法。因此,有了這種解釋(這可能也揭示了我的知識水平...)任何人都可以告訴我,如果我正在做一些錯誤的鐵軌或如果我只是不得不使用JavaScript?

某些示例代碼(適用於Rails和/或JS)最值得讚賞! (請保持簡單,我知道Ajax等是藝術的狀態,但我只是想讓這個運行:-)) ...也鏈接到代碼示例,它只是在Rails上顯示像這樣的項目(簡單:-))會很好!

+0

所以,如果我理解正確此,當用戶更新量場,然後點擊「購買」,你希望用戶採取的是知道什麼用戶購買,又有多少購買形態,是正確? – BrMcMullin

+0

啊我明白了,你想要的形式出現在的地方...... – BrMcMullin

回答

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中默認隱藏,當用戶點擊「Buy Me!」時可以看到該表單。有關文章的按鈕。

這種方法也可以進行一些調整,以允許用戶通過移動表單聲明並使用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 %> 

這可能不是確切的,但我希望它指出你在正確的方向!

1

Ruby on Rails不依賴於Javascript,因此您無需瞭解Javascript即可學習Ruby和Rails。

爲了回答您的問題之一link_tomethod並不是指哪個動作你想打電話,但到諸如「POST」 HTTP方法「GET」,「PUT」,「刪除」。您應該使用:action來告訴控制器(方法)要執行哪個操作。

有幾個地方可以讓你開始使用Ruby和Rails。

  • Code School - 代號學校有一些免費的課程,其中一人恰好是Ruby的一個非常好的一個on Rails的
  • Code Academy - 代碼學院是比代碼的學校更有條理,並且仍然提供了不同的多門課程web開發技術
  • Railscasts - Railscasts是一個偉大的網站有欄杆的一些免費的視頻教程

也許有人能詳細闡述更多的資源。另外,Github有許多開源項目,您可以查看並瞭解人們如何使用Ruby和Rails。

+0

+1提供偉大的地方開始。 Railscasts對我來說尤其是天賜之物。 – BrMcMullin

+0

太棒了,幫助! – Tobi89

+0

我現在只是用一個按鈕來調用方法...<%= button_to「yes」,:controller =>: :method =>:match%> – Tobi89

相關問題