Ассоциировать действие с on_change для form.select в Rails? - PullRequest
2 голосов
/ 06 апреля 2009

Вот мой выпадающий список для выбора чатов:

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

Мои маршруты:

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

При изменении значений в раскрывающемся списке я хочу перейти к определенной выбранной комнате чата. Как мне это сделать?

Ответы [ 4 ]

4 голосов
/ 06 апреля 2009

одним (простым) способом было бы добавить параметр: onchange к помощнику выбора

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")')
1 голос
/ 14 апреля 2009

Предполагая, что вы используете jQuery (а кто нет в наши дни), что-то вроде этого будет работать:

Вид ERB (исправлено сверху):

<% 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() + "/";
  });
});

Код прототипа будет очень похож.

1 голос
/ 14 апреля 2009

Это всего лишь вариант подхода, который Энди использовал выше, но ...

Шаблон, который я обычно использую сейчас, заключается в написании простой функции JavaScript, которая будет загружать выбранный путь:

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

Затем эта функция вызывается заменой тега select:

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

Где переменная пути - это базовый путь для чатов.

0 голосов
/ 06 апреля 2009

Просто короткая заметка, я знаю, ты не спрашивал об этом. Но когда вы работаете с чатами, используйте ajax-опросы, чтобы проверить наличие новых чатов. Если вы этого еще не сделали, проверьте Джаггернаут .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...