2014-08-27 26 views
0

我正在尋找一個下拉式的Rails示例ruby,它將改變一堆輸入字段。總之,我有三個人,你可以是......你從一個下拉列表中選擇這個,對於這三個人中的每一個人,他們都有五個自己的問題。Rails - 下拉菜單改變多個輸入字段?

你知道有什麼樣的例子可以學習嗎?

+0

只是爲了澄清:您是否從下拉列表中選擇,提交併返回基於用戶選擇的唯一問題集的回覆? – Vardarac 2014-08-27 16:29:06

+0

@Vardarac - 首先,感謝您的關注!其次,我的目標是在用戶選擇後在同一頁面上返回響應(五個輸入),而無需提交。 – nathanielelliott 2014-08-27 16:40:10

+0

這可能只使用Rails助手是可行的,但如果你知道並且使用jQuery,它可能會更容易。你的偏好是什麼? – Vardarac 2014-08-27 16:53:51

回答

1

這是我設想的方式。在您看來:

<%= select_tag :person_id, 
    options_from_collection_for_select(Person.all, "id", "name", person_to_prepopulate_select_with), 
    :id => "person_selector_for_questions" %> 

這會創建您的下拉菜單。我假設你有一個Person模型,並且這個模型是一個Personhas_manyQuestion s。

在JavaScript:

$("#person_selector_for_questions").change(function(e) { 
    var $dropdown = $(this); 
    $.get('/questions?person_id=' + $dropdown.val(), function(data) { 
     $dropdown.after(data); 
    }); 
}); 

這(1)觸發,當用戶改變下拉的值一個jQuery事件處理程序,(2)觸發一個AJAX GET請求到http://yoursite/questions?person_id=selected_person_id,和(3)支使用.after在下拉菜單中輸入當前頁面的響應。你當然可以定製你的jQuery調用,把它放在你需要的頁面中。

現在是重要的部分。在您的QuestionsController

def index 
    if request.xhr? && params[:person_id] 
    @questions = Question.where(:person_id => params[:person_id] 
    render :person_questions 
    return # important to prevent rest of controller action from firing 
    end 
end 

這個素數的index行動應對AJAX調用包含在他們的查詢字符串person_ids。它會從與控制器相對應的視圖文件夾(本例中爲questions文件夾)中啓動部分名爲person_questions,該文件夾將包含您想要插入網頁的信息。

最後,您必須在您的app/views/questions文件夾中創建這個部分,_person_questions.html.erb。這部分內容將包含jQuery將在您的頁面中保留的內容。你可以,例如,把這個部分:

<% @questions.each do |q| %> 
    <%= q.contents %> 
<% end %> 

因此,問題的內容,或者其他任何你的心臟的慾望被放置在頁面上,加載到當前頁面。

+0

現在嘗試一下,但這樣做更有意義!謝謝@Vardarc – nathanielelliott 2014-08-27 18:40:45

+1

順便說一句,完美的工作!非常感謝你......現在我們正在用JS代替原來的代碼。這很有幫助。 – nathanielelliott 2014-09-02 02:38:03