Cześć!
Po zdobytej wiedzy wróciłem Dalej kontynuuję projekt z którym mam dziwny problem. Chodzi o mailbox. Do projektu skorzystałem z devise do autoryzacji i pasujący do niego gem has_mailbox https://github.com/fajrif/has_mailbox/ Ładny, prosty ale napotykam jeden problem, a jako że autor nie odpowiada to mam nadzieję że pomożecie. Problem jest przy wysyłaniu wiadomości, po wpisaniu adresata(np. tomek), nie odnajduje jego ID z bazy. Obojętnie co wpiszę za adresat to wyskakuje błąd “Couldn’t find User with id=0” Ale gdy wpiszę konkretne ID do wiadomość zostanie przesłana do adresata. Szukałem i szukałem i myślę, że znalazłem linie kodu w controllers która za to odpowiadadef token
query = "%" + params[:q] + "%"
recipients = #{user_class_name}.select("name,#{mapping[:user_display_attribute]}").where("#{mapping[:user_display_attribute]} like ?", query)
respond_to do |format|
format.json { render :json => recipients.map { |u| { "id" => u.id, "name" => u.#{mapping[:user_display_attribute]}} } }
end
end
To mi wyskakuje w konsoli SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 0]]
Zależało by mi na tym aby mógł on wyszukiwać tak jam właśnie ma.
W bazie users kolumna z nickami użytkowników to “name”
Wygląda na to, że z jakiegoś powodu #{mapping[:user_display_attribute]} to “id” zamiast “name” stąd dowolny string AR zamienia Ci na 0.
Dlaczego? Nie wiem.
Ja miałem w planach przerobić to zapytanie by nie szukało po id, skoro i tak wpisuję nazwę użytkownika w adresie. Mam problem, bo nie rozumiem tego zapytania mam tylko przypuszczenia przez które nic nie wychodzi. Na taki projekt by pokazać by starczyło. Nie mam również pewności czy to zapytanie w całości jest tutaj.
Kolega z grupy napisał, że aby sprawdzić ID wystarczy User.find(id) ale tego również nie wiem jak by wykorzystać.
To też ma coś wspólnego z problemem:
def create
unless params[:user_tokens].blank? or params[:subject].blank? or params[:body].blank?
recipients = #{user_class_name}.find(params[:user_tokens].split(",").collect { |id| id.to_i })
if #{mapping[:user_object_name]}.send_message?(params[:subject],params[:body],*recipients)
redirect_to mailboxes_url, :notice => 'Successfully send message.'
else
flash[:alert] = "Unable to send message."
render :action => "new"
end
else
flash[:alert] = "Invalid input for sending message."
render :action => "new"
end
end
mapping[:user_object_name] = "current_user"
mapping[:user_display_attribute] = "name"
user_tokens = @message.from.id
Pod pod postem, ale to taki rodzaj refreshu Więc naprawiłem problem
#{user_class_name}.find(:first, :conditions => ["name = ?", params[:user_tokens]])
Szukam po name.
Mam drugie pytanie. Otóż ten gem jest instalowany, ma swoją bibliotekę has_massages. Znajdują się tak główne rzeczy: 2 modele i kontroler i jeszcze 1 plik nad folderami. Czy mogę je skopiować do swoich folderów projektu? Tak by móc później wrzucić na heroku bez instalacji gemu/pluginu. Jeżeli ruby nie pozwala na takie sprawy, to czy po wrzuceniu na heroku widzę folder z zainstalowanymi gemami by móc edytować ich strukturę?
Github -> fork -> zmiana -> instalujesz gem ze swojego brancha
Tak później sobie o tym pomyślałem. Dzięki, póki co to wszystko działa
Zależało by mi na tym aby mógł on wyszukiwać tak jam właśnie ma.