2012-06-19 65 views
1

我有一個簡單的控制器,它是通過腳手架創建的並具有「顯示」功能。如何將數據從控制器發送到Ruby on Rails中的視圖

在通過腳手架創建的視圖中,我有一個只出現在特定條件下的圖像。

我想在控制器中設置或評估條件並將其發送到視圖。 我不知道該怎麼做,或者這是否是正確的方法。

+0

我建議你閱讀「使用rails的敏捷web開發」,它包含了這個(以及其他許多東西)。 –

回答

1

一般情況下應該在視圖文件中使用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不是在你的控制文件中的複雜情況。這使您可以重複使用遠離特定控制器的條件並使其更具可測試性。

0

如果您只想根據特定條件顯示和隱藏圖像,則可以使用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 - 本書是優秀免費

相關問題