Generowanie linków w kontrolerze

Witam,

chciałbym utworzyć link w kontrolerze w ten sposób:

@body = "...kliknij ten #{link_to 'link', user_friendships_url(@current_user), :method => :post}"

Oczywiście wyskakuje błąd, próbowałem jeszcze z url_for… Jak to zrobić, żeby nie wklepywać HTMLa ?

Pozdrawiam

Przenieść to do widoku. Jeżeli potrzebujesz tworzyć HTML w kontrolerze to najprawdopodobniej wytłumaczenie jest jedno - http://www.doingitwrong.com/

ok,fajne obrazki,

chodzi o to ze wykonuje się jakaś akcja i po niej muszę wysłać wewnętrzną wiadomość do użytkownika, wiadomość ma zawierać odpowiedni link. Więc jak można stworzyć widok, który mogę “podczepić” pod zmienna @body ?

A przez co wysyłasz tę wiadomość? Tzn. jest to mejl, czy pokazuje mu się przez stronę? Zarówno w pierwszym jak i drugim przypadku kod ten powinien pojawić się w widoku (czyli jakimś szablonie rhtml lub tym podobnym). W kontrolerze powinieneś tylko ustawić dane (poprzez zmienne @instancyjne), które podlegają zmianie.
Jeśli natomiast ten sam “tekst” pojawia się w wielu miejscach, to właściwym rozwiązaniem będzie albo helper, albo _partial.

Większa część kodu:

[code=“Ruby”]def create
@to = User.find_by_nickname(params[:user_id])
@request = Friendship.request(@current_user.id,@to.id)
if @request == 1

  @subject = "temat"      
  @body = "...kliknij ten #{link_to 'link', user_friendships_url(@current_user), :method => :post}"                      
  send_message(@to,@subject,@body,@current_user)
           
  flash[:notice] = 'Wysłano'              
end
redirect_to root_url

end[/code]
Wysłanie wiadomości = wpis do bazy. Nie wiem jak za bardzo skorzystać w tym miejscu z widoku?

Moglbys to zrobic w mysl takiej idei:

[code=Ruby]# controller
body = render_to_string :partial => ‘body’, :locals => {user => @current_user}
send_message(to, subject, body, …)

partial _body.html.erb

...kliknij w ten <%= link_to 'link', user_friendships_url(user), :method => :post} %>

[/code] A... i zmienne nie musza byc zawsze zmiennymi instancji, wiec jesli sluza tylko do wyslania wiadomosci, to moze lepiej, gdyby byly lokalne w obrebie tej metody? Poza tym lepiej unikac linkow w styli "kliknij w ten link". Polecam [url=http://www.webusability.pl/kurs-usability/]kurs webusability[/url].

Powyższe rozwiązanie jest dużo lepsze niż ładowanie hlperów do kontrolera, ale jak ktoś bardzo chce, to:

http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=helpers+in+controllers+rails

:slight_smile:

Ok, rozwiązanie z partialem działa dobrze, dopiero zauważyłem jeden problem, że nie mogę pozwolić na wyświetlanie htmla…

Na szczęście o treść będzie martwił się ktoś inny :slight_smile: