Dwa selecty i panel administracyjny

Witam,
mam dwa pola w bazie LIGA i DRUŻYNY. W momencie rejestracji chcę zrobić dwa selecty, w pierwszym wybieramy LIGĘ i jeżeli wybierzemy ligę dopiero wtedy drugi select jest aktywny i wyświetla DRUŻYNY z tej ligi i możemy wybrać drużynę.

Pojedyńczego selecta umiem zrobić, robię na podstawie tego (sekcja select) http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails

Drugi pytanie, mam jak zrobić panel administracyjny. Każda klasa wygląda mniej więcej tak class PostsController < ApplicationController
Myślałem, żeby zrobić osobną klasę typu AdminController w której sprawdzałbym czy user jest adminem, a wszystkie klasy które byłby w panelu dziedziczyłby nie z ApplicationController tylko z AdminController. Można tak zrobić czy może jakoś inaczej?
Nie chciałbym po prostu w każdej klasie która ma być dla admina dodwac before_filter :czy_admin? bo tak aktualnie robię.

AD1 obsługę drugiego selecta zrób tak:

  • na serwerze dodaj akcję, która będzie przyjmowała jako parametr id ligi i będzie zwracała jsona z drużynami z tej ligi
  • w javascripcie dodaj funkcję, która przy wybraniu jakiejś ligi, zrobi request do serwera, w odpowiedzi otrzyma jsona z drużynami i na podstawie tego doda opcje do drugiego selecta (pamiętaj tylko, żeby najpierw zawsze usunąć z niego obecne opcje)

btw artykuł, który podlinkowałeś jest stary, nie zagłębiałem się w niego, ale to co było aktualne 5 lat temu, teraz już prawdopodobnie nie jest.

AD2 tak, możesz zrobić tak jak piszesz.

Odnośnie tego 1szego, to sam sobie nie poradzę. Zrobiłem to na jednym select <%= select(“Wybierz”, “id”, @team.map {|i| [[i.league.league, i.team ],i.id]}) %>
Tylko wyswetla mi w takim formacie [“Liga”, “team”], da rady zrobić, żeby inaczje to wyświetlało? W innym formacie niestety nie chce mi przyjąć.

Jakby ktoś miał tutka odnośnie rozwiązania Arnvalda to byłbym wdzięczny.

[quote=chinchin]Witam,
mam dwa pola w bazie LIGA i DRUŻYNY. W momencie rejestracji chcę zrobić dwa selecty, w pierwszym wybieramy LIGĘ i jeżeli wybierzemy ligę dopiero wtedy drugi select jest aktywny i wyświetla DRUŻYNY z tej ligi i możemy wybrać drużynę.

Pojedyńczego selecta umiem zrobić, robię na podstawie tego (sekcja select) http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails[/quote]
hint: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-grouped_collection_select + trochę kodu w JS

http://railscasts.com/episodes/88-dynamic-select-menus
http://railscasts.com/episodes/88-dynamic-select-menus-revised

[quote=chinchin]Drugi pytanie, mam jak zrobić panel administracyjny. Każda klasa wygląda mniej więcej tak class PostsController < ApplicationController
Myślałem, żeby zrobić osobną klasę typu AdminController w której sprawdzałbym czy user jest adminem, a wszystkie klasy które byłby w panelu dziedziczyłby nie z ApplicationController tylko z AdminController. Można tak zrobić czy może jakoś inaczej?
Nie chciałbym po prostu w każdej klasie która ma być dla admina dodwac before_filter :czy_admin? bo tak aktualnie robię.[/quote]
Może dla Twoich potrzeb wystarczy jakieś gotowe rozwiązanie? :slight_smile: https://www.ruby-toolbox.com/categories/rails_admin_interfaces

Chciałem zrobić wg. tego http://railscasts.com/episodes/88-dynamic-select-menus-revised
Tutaj jest to na githubie https://github.com/railscasts/episode-088

Pokazuje mi się tylko 1szy select, drugi już nie. Jak wywale dołaczenie tego jquery to pokazują się wtedy dwa, ten drugi jest zgrupowany, ale nie działa tak jak powinno.
Odpaliłem tego z githuba i działa dobrze.

To jest mój plik users.js.coffee

[quote]# Place all the behaviors and hooks related to the matching controller here.

All this logic will automatically be available in application.js.

You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

jQuery ->
$(’#user_group_id’).parent().hide()
groups = $(’#user_group_id’).html()
$(’#user_year_id’).change ->
year = $(’#user_year_id :selected’).text()
escaped_year = year.replace(/([ #;&,.+*~’:"!^$[]()=>|/@])/g, ‘\$1’)
options = $(groups).filter(“optgroup[label=’#{escaped_year}’]”).html()
if options
$(’#user_group_id’).html(options)
$(’#user_group_id’).parent().show()
else
$(’#user_group_id’).empty()
$(’#user_group_id’).parent().hide()[/quote]
i plik .html.erb

[quote]


<%= f.label :year_id, “Wybierz Rok” %>

<%= f.collection_select :id, Year.order(:year), :id, :year, include_blank: true %>

<%= f.label :group_id, "Wybierz grupe" %>
<%= f.grouped_collection_select :group_id, Year.order(:year), :groups, :year, :id, :group, include_blank: true %>

[/quote] Nie wiem, jak odpalę to na localhost to Rok mogę wybrać, ale niestety nie pojawia mi się Grupa

Jak wchodzę do users.js to plik wygląda tak:

[quote](function() {

jQuery(function() {
var groups;
$(’#user_group_id’).parent().hide();
groups = $(’#user_group_id’).html();
return $(’#user_year_id’).change(function() {
var escaped_year, options, year;
year = $(’#user_year_id :selected’).text();
escaped_year = year.replace(/([ #;&,.+*~’:"!^$[]()=>|/@])/g, ‘\$1’);
options = $(groups).filter(“optgroup[label=’” + escaped_year + “’]”).html();
if (options) {
$(’#user_group_id’).html(options);
return $(’#user_group_id’).parent().show();
} else {
$(’#user_group_id’).empty();
return $(’#user_group_id’).parent().hide();
}
});
});

}).call(this);[/quote]
Nie wiem dlaczego to dokleja, jeśli odpalę to z RAILCAST githuba to ten plik wygląda normalnie, nie ma tego doklejnonego.

Cześć,
to na jquery sobie odpuściłem, męczę się z tym http://railscasts.com/episodes/88-dynamic-select-menus

Mam problem z js, firebug pokazuje mi document.observe is not a function
na kod

document.observe('dom:loaded', function() { countrySelected(); $('person_country_id').observe('change', countrySelected); });