Problem z kontrolerem i DRY

mam kontroler powiedzmy gra

[code] def index
if session[:user_id] == nil
redirect_to :controller => “sessions”, :action => ‘new’
end
user = User.find(session[:user_id])
@nick = user.nick
@money = user.money
end

def building

end[/code]
powiedzmy będę maił w grze pasek z info ile mamy pieniędzy i kilka jeszcze innych parametrów wyświetlany w każdym widoku.
Średnio mi się widzi kopiować dotychczasową zawartość index do pozostałych akcji co będzie średnio zgodne z zasadą DRY macie jakiś pomysł jak to rozwiązać nic mi na razie nie przychodzi do głowy

Możesz napisać metodę w ApplicationController

def current_user_required if session[:user_id].nil? redirect_to(:controller => "sessions", :action => 'new') and return end @user = User.find(session[:user_id]) end helper_method :current_user_required
a później używać ją w before_filter tam gdzie wymagany jest @user

before_filter :current_user_required

[quote=maykel]Możesz napisać metodę w ApplicationController

helper_method :current_user_required

a później używać ją w before_filter tam gdzie wymagany jest @user

before_filter :current_user_required

[/quote]
Wystarczy po prostu stworzyć metodę prywatną w ApplicationController. Metoda helper_method służy do tworzenia helperów używanych w widoku i umieszczanie w nich redirectów nie jest dobrym pomysłem.

co do autentykacji: spróbuj może jakiegoś gem-a (devise?) żeby nie odkrywać koła na nowo :wink:

co do helperów z pieniędzmi itp. możesz to zrobić np. tak:

dodaj w layoucie

<% if user_signed_in? %> <%= render 'user_info' %> <% end %>
i w /app/views/application/_user_info.html.erb

<%= current_user.nick %> <%= current_user.money %>
#user_signed_in? i #current_user to metody z devise, jeżeli użyjesz innego gem-a to pewnie będą inne :slight_smile:

Co do uwierzytelniania, to już dostałeś odpowiedzi - użyj jakiegoś gema, który Ci ułatwi sprawdzanie czy ktoś jest zalogowany.

Co do reszty (tzn. kopiowania pobierania np. money w wielu akcjach), to zobacz cells: http://github.com/apotonick/cells W README masz przykład koszyka w sklepie internetowym, to jest podobny problem.

Ok to biorę się jeszcze raz za devise coś mi nie działało jak to próbowałe ostatnio odpalić ;( zobaczymy na czym tym razem stanie :wink: Dobrze że można liczyć na wasze wsparcie !

Już wiem co mi nie działało i nie działa dalej z devise nie mam formularzy np sing_in :
w routes.db mam dodanie devise :players, po wykonaniu rake routes routingi są widoczne np /players/sing_in mimo tego po odpaleniu adresu otrzymuję routing error ;(
proces instalacji jak w railscast 209 wszystko śmiga bez błędów do momentu wyświetlenia formularza z rejestracją . Nie mam pojęcia co z tym zrobić ;( może ktoś z was miał już taki problem ?

@edit
hmm nie wiem dlaczego to miało taki wpływ ale brak linijki w routes.rb root :to sprawia że są jakieś błędy po dodaniu jej wszystko jest ok :wink: