2009-04-06 2 views
2

Folgendes ist mein Dropdown-Chat-Räume zu wählen:Assocociate Aktion zu on_change für form.select in Rails?

<% form_for :chat_room do |form| %> 
      <%= form.select(:title, @chat_rooms.collect! {|x| x.title},{:include_blank =>'select a chat room'}) %> 
     <% end %> 

Meine Strecken sind:

ActionController::Routing::Routes.draw do |map| 

    map.resource :account, :controller => "users" 
    map.resources :poll 
    map.resources :users,:has_many => :stories 
    map.resources :chat_rooms ,:member => {:create_message => :post},:collection => {:ajax_updater=>:get} 
    map.logout 'logout', :controller => 'user_sessions', :action =>'destroy' 
    map.resource :user_session 
    map.resource :welcome 
    map.connect '/', :controller => 'welcome', :action => 'index' 

    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 
end 

Auf Werte in der Dropherunter ich auf einen bestimmten Chatroom ausgewählt navigieren möchten. Wie mache ich das?

Antwort

4

eine (einfache) Art und Weise der hinzuzufügen wäre: Onchange Parameter an die Auswahl Helfer

form.select(:title, @chat_rooms.collect! {|x| [x.title, x.id] },{:include_blank =>'select a chat room'}, :onchange => 'window.location.href = "chat_rooms/" + this.getAttribute("value")') 
+0

Nur eine Erinnerung: Enumerable # sammeln! ist eine destruktive Methode. Sie möchten stattdessen Enumerable # collect. Und im Allgemeinen ist Enumerable # map (was dasselbe tut) aus historischen Gründen vorzuziehen. –

0

Nur eine kurze Notiz, ich kenne dich nicht darüber fragen. Aber wenn Sie mit Chats arbeiten, sollten Sie mit Ajax-Polling sparsam sein, um nach neuen Chats zu suchen. Wenn Sie dies nicht bereits getan haben, überprüfen Sie Juggernaut. Diese

1

ist nur eine Variation des Ansatzes, die andi verwendet oben, aber ...

Das Muster, das ich normalerweise jetzt verwenden, eine einfache JavaScript-Funktion zu schreiben, die den ausgewählten Pfad geladen werden kann:

CHATROOM.display_selected = function(id, base_path) 
{ 
    window.location = base_path + '?id=' + id; 
} 

Diese Funktion wird dann durch die Onchange des select-Tages genannt:

select_tag("chat_room",options_for_select(chat_rooms, selected), :onchange => "CHATROOM.display_selected(this.value, '#{chat_rooms_path}')") 

Wenn die Pfadvariablen der Basispfad für chat_rooms ist.

1

Angenommen, Sie sind mit jQuery (und wer nicht in diesen Tagen), so etwas wie dies funktionieren würde:

ERB-Ansicht (von oben korrigiert):

<% form_for :chat_room do |form| %> 
    <%= form.select(:title, @chat_rooms.map { |c| [c.title, c.id] }, {:include_blank =>'select a chat room'}) %> 
<% end %> 

JS:

$(document).ready(function() { 
    $("#chat_room_title").change(function(event) { 
    window.location = "/chat_rooms/" + $("#chat_room_title").val() + "/"; 
    }); 
}); 

Der Prototyp Code wäre sehr ähnlich.