2011-05-22 28 views
0

我都是新來的rails,但對Spring和.net等「常規」MVC編程非常熟悉。我試圖應付所有這些新的做事方式,但我一直陷入困境 - 尤其是當涉及到根據用戶的選擇渲染/刷新具有不同數據的相同視圖時。Rails 3,使用選擇標記中的選擇來更新數據

這確實很簡單,而且我可以看到它已經被問了很多次 - 儘管我似乎找不到任何明確的答案,並且「這是做這件事的方式」。

所有我想要做的是這樣的:

數據庫 「方案」,以表A,B,C和它們的引用:
Ç - >一個
Ç - >乙

基於在下拉列表中選擇B,我想顯示所有「A的Cs」 - 不介意查詢部分,這是直截了當的。 現在我選擇第一個B作爲我控制器中頁面的「第一個渲染」,但是當用戶在下拉列表中選擇另一個B時,應該根據選擇重新顯示視圖...
我不想使用自定義JavaScript填充或一些其他「怪異」的方式。我必須可以根據RoR中的選擇選擇一些內容並刷新視圖。

我希望你能夠幫助我,或者指引我走向正確的方向。

謝謝!

回答

1

把所有這些選擇列表的形式,並在列表中的「的onchange」事件中添加JavaScript代碼提交表單($(「FORM_NAME」)提交( ))。提交表單後,您將所有選定的值都設爲參數(params [:select_list_1],params [:select_list_2])。根據需要處理它們,引發查詢並再次顯示視圖。

您可以將表單提交給相同的操作。該行動將是這樣的:

def index 
    if !request.post? 
    # Generate default values 
    else 
    # Generate new resultset based on params 
    end 
end 

EDIT(表格爲例):表單可以添加和:URL指定的表單元素的作用:

<%= form_for(:select_list_form, :url => {:controller => "my_controller", :action => "index"}) do |f| %> 
<!-- Your select list here --> 
    <%= f.submit "Continue", :class => "form-button form-left" %> 
<% end %> 
<!-- Render data based on your instance variables --> 
+0

好了,就快了。 – Hoof 2011-05-22 18:36:23

+0

當你到達那裏時不要忘記upvote ......;) – 2011-05-22 19:10:08

+0

當然不是! - 剛剛還沒有使它的工作:P 你可以請顯示一些更多的代碼?我可以讓表格正確提交..如果我提交它,它會抱怨我沒有創建方法 - 我知道它的標準粗糙,但是我不需要在這裏創建任何東西...... 我在form_tag action => my_action中獲得了選擇標記。 – Hoof 2011-05-22 19:18:49

0

我有遇到這個問題我自己,我已經找到了最乾淨的方法是使用這樣的:

它調用一個Ajax請求時,選擇列表中的變化。然後,您必須在控制器中設置一個新動作,例如load_related:

def load_related 
    @childreen = Model.where(....) 
    render :update do |page| 
     page.replace 'div id where you whant stuff to appear', :partial => '...' 
    end 
end 

這是您在Rails中的第一個ajax請求。對於文檔: