我有一個簡單的控制器,它是通過腳手架創建的並具有「顯示」功能。如何將數據從控制器發送到Ruby on Rails中的視圖
在通過腳手架創建的視圖中,我有一個只出現在特定條件下的圖像。
我想在控制器中設置或評估條件並將其發送到視圖。 我不知道該怎麼做,或者這是否是正確的方法。
我有一個簡單的控制器,它是通過腳手架創建的並具有「顯示」功能。如何將數據從控制器發送到Ruby on Rails中的視圖
在通過腳手架創建的視圖中,我有一個只出現在特定條件下的圖像。
我想在控制器中設置或評估條件並將其發送到視圖。 我不知道該怎麼做,或者這是否是正確的方法。
一般情況下應該在視圖文件中使用erb或haml處理條件。如果你用條件更新你的問題,那麼我會看到更新我的答案以反映它。現在,我將使用一個共同的條件。
假設你只想顯示一個圖像,如果一個對象的特色。我們假設對象中有一個特徵字段用作標誌(1,0)。
如果這個對象是一篇文章,我們可以檢查視圖文件中的條件。控制器會從模型中獲取相應的文章:
-# articles_controller show action
@article = Article.find(params[:id])
..
-# views/articles/show.html.erb
<% if @article.featured? %>
// show image here
<% end %>
記住這是不一定是正確的一個例子條件。這只是爲了說明我的初始方法。
我不會建議你使用javascript來隱藏/顯示取決於這個條件,因爲你然後把你的邏輯在javascript中,當它可以很容易地從你的視圖文件中管理。
如果條件是複雜的,那麼您需要將其移動到模型,並進行類似:
if @article.some_complex_condition?
..rather不是在你的控制文件中的複雜情況。這使您可以重複使用遠離特定控制器的條件並使其更具可測試性。
如果您只想根據特定條件顯示和隱藏圖像,則可以使用JQuery。你不應該把任何東西放在以視圖爲中心的控制器中。
您還可以獲取'show'中的任何數據元素的id並將其傳遞給JavaScript。
JQuery有show()
和hide()
方法可以爲你工作。下面是對隱藏方法的文檔:
基本上,如果你已經爲你的形象有一定的ID,你會做這樣的事情:
$(document).ready(function() {
$("#myImage").hide();
if (some_condition === true) {
$("#myImage").show();
}
});
你可以把這些代碼在你的application.js
文件。
我颳起了簡單的jsfiddle展示一種方式來顯示與按鍵隱藏: http://jsfiddle.net/phillipkregg/92RDS/
當然,代碼可能會取決於您正在嘗試做的是不同的。
如果您需要獲得對象的「身份證」中的「秀」視圖,比你可以在你的節目視圖的底部像這樣把一個腳本標籤:
<script type="text/javascript">
var my_show_object = <%= @some_object.id %> //this will be the specific id of whatever the object is that you passed from the controller
alert(my_show_object); //this helps with debugging to see if you have the right id
</script>
如果您需要以上的ID,並希望得到整個Rails的對象,並表示它使用Javascript - 只是這樣做在你的軌道「秀」視圖的底部:
<script type="text/javascript">
var my_object = <%= @your_rails_object.to_json %>;
console.log(my_object); //This code allows you to look in the console and see exactly what your object looks like.
</script>
就像是最後一個,@your_rails_object
是您在控制器中的show view中顯示的變量。這會將它作爲json對象返回,以便您可以獲取id或其擁有的任何屬性。
此外,如果你剛開始學習Rails的,我會推薦這本書在線:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book
這就是我學到的Rails - 本書是優秀和免費。
我建議你閱讀「使用rails的敏捷web開發」,它包含了這個(以及其他許多東西)。 –