Dodawanie wartości do bazy

Witam, mam w controllerze Notices taki kod:

def create @notice = Notice.new(params[:notice]) @current_user = current_user_session && current_user_session.record @user = @current_user @user.numberog += 1 @notice.author = @user.name + ' ' + @user.surname
I wszystko super działa tylko przy dodaniu nie powiększa wartości numberog o 1 a informacji o błędzie też żadnej nie ma… Z góry dziękuje za pomoc.

Musisz dodać jeszcze @user.save

Przy okazji wrzuć do aplikacji jakiś plugin do autentykacji, takie rzeczy jak tam masz nie powinny siedzieć w kontrolerach.

Druga sprawa jest taka, że dużo lepiej jest powiązać ze sobą notice i usera. Jeżeli trzymasz w notice tylko imię i nazwisko usera, to kiedy user zmieni swoje dane, notice pozostanie niezmienione.

Nie ma możliwości zmiany nazwy użytkownika więc problem z głowy :slight_smile:

Mógłbyś dokładniej opisać jak ?

Zrobiłem tak:

@user = @current_user @user.numberog += 1 @user.save
i niestety nie działa

[quote=Falsetto]Witam, mam w controllerze Notices taki kod:

def create @notice = Notice.new(params[:notice]) @current_user = current_user_session && current_user_session.record @user = @current_user @user.numberog += 1 @notice.author = @user.name + ' ' + @user.surname
I wszystko super działa tylko przy dodaniu nie powiększa wartości numberog o 1 a informacji o błędzie też żadnej nie ma… Z góry dziękuje za pomoc.[/quote]
Nie ma bo używasz metody “save” i nie sprawdzasz co zwróciła (true/false). Podejrzewam, że model nie waliduje się, a więc nie zapisuje się do bazy.

Nie ma możliwości zmiany nazwy użytkownika więc problem z głowy :)[/quote]
Niby tak i niby jestem zwolennikiem YAGNI, ale to jest akurat kwestia designu bazy danych. Jeżeli możesz coś zrobić lepiej lub gorzej, a zrobienie lepiej nie kosztuje Cię praktycznie żadnego wysiłku, to ja bym jednak wybrał tą lepszą metodę.

Mógłbyś dokładniej opisać jak ?[/quote]
Użyj któregoś z pluginów:


Ja obecnie używam tego drugiego, czyli authlogic.

[quote=Falsetto]Zrobiłem tak:

@user = @current_user @user.numberog += 1 @user.save
i niestety nie działa[/quote]
Tak jak napisałe radarek, walidacja. Sprawdź co zwraca user.save i jezeli zwraca false, to możesz w widoku zrobić <%= error_messages_for @user %>

user.save zwraca wartość false a jak wstawie do widoku <%= error_messages_for @user %> to wywala błąd:

 `@#<User:0x7f76d3e2a350>' is not allowed as an instance variable name
<%= error_messages_for :user %>

@current_user = current_user_session && current_user_session.record @user = @current_user
A to tutaj to przypadkiem nie ustawia po prostu @user na true/false?

[quote=radarek]<%= error_messages_for :user %>
[/quote]
Wyświetla się walidacja z modelu user.

[quote=Yax]@current_user = current_user_session && current_user_session.record @user = @current_user
A to tutaj to przypadkiem nie ustawia po prostu @user na true/false?[/quote]
Nie, w rubim wszystko zwraca jakąś wartość, tak samo wyrażenia logiczne. Jeżeli wynikiem && jest prawda, to zostanie zwrócony ostatni argument.

@user.numberog += 1 @user.save
No i mam coś takiego i mimo to nie działa, dlaczego ?

[quote=Falsetto]@user.numberog += 1 @user.save
No i mam coś takiego i mimo to nie działa, dlaczego ?[/quote]
A co się wyświetla w walidacji, o której wspomniałeś 2 posty wyżej?

Wyświetla się że pole gender nie może być puste które znajduje się przy rejestracji…

I jakie masz w związku z tym wnioski? :stuck_out_tongue:

Dobra naprawione, okazało się że w walidacji była literówka wynikająca z kodowania, dzięki wielkie :wink: