redirect_to

Witam ponownie, mam znowu problem, znowu błahy
Chcę zrobić najprostszą czynność jaką chyba można zrobić - przesłanie danych z formularza i odczytanie na drugiej stronie
stworzyłem sobie kontroler i widok
Kontroler:

[quote]class KontrolerController < ApplicationController
def widok
@imie = Uzytkownicy.new(params[:imie])
@imie.save
redirect_to new
end
end[/quote]
Widok:

[quote]<%= form_for :imie do |eee| %>


<%= eee.text_field :imie, placeholder: ‘Imię’, autofocus: ‘autofocus’ %>


<%= eee.email_field :email, placeholder: ‘E-mail’, spellcheck: ‘false’ %>


<%= eee.submit :wyslij, value: ‘Wyślij’ %>

<% end %>[/quote]
model:

[quote]class Uzytkownicy < ActiveRecord::Base
attr_accessible :email, :imie
validates_length_of :imie, :in => 8…16
end[/quote]
i stworzyłem pusty plik w folderze “app/views/kontroler/odczyt.html.erb”

Rozumiem swój kod tak:
Użytkownik wypełnia formularz, klika “wyślij”, model waliduje dane, w przypadku powodzenia kontroler wysyła je do bazy danych i przekierowuje je do … no właśnie, chcę go przekierować do pliku odczyt.html.erb
ale za cholerę nie wiem, jak to zrobić?
W ogóle wydaje mi się, że coś zagmatwałem, proszę o pomoc.

Przekierować możesz do akcji ale nie do pliku.
W praktyce przekierowanie odbywa się na poziomie przeglądarki która w odpowiedzi dostaje tylko nagłówek nakazujący jej przejście na inny adres.
W takim wypadku musisz tę akcję stworzyć i nadać jej ścieżkę w routingu by była dostępna.

Jeśli chcesz tylko wyświetlić plik widoku użyj.

render 'odczyt'

To spowoduje użycie widoku ‘odczyt’ zamiast domyślnego dla danej akcji.

Zakładając że formularz dochodzi do danej akcji ‘widok’ to brakuje ci

[code=ruby]# w config/routes.rb
get ‘odczyt’ => ‘kontroler#odczyt’

w kontrolerze

def odczyt
end

def widok
@imie = Uzytkownicy.new(params[:imie])
@imie.save
redirect_to :odczyt
end[/code]
Czyli redirect_to może wziąć różne argumenty - http://apidock.com/rails/ActionController/Redirecting/redirect_to u ciebie trzeba podać nazwę akcji np. :odczyt, oprócz tego musisz mieć ścieżkę w config/routes.rb prowadzącą do tej akcji. Po tym powinno śmigać.

Lecz osobiście bym się wystrzegał języka Polskiego jeżeli chodzi o nazewnictwo, w railach jest trochę rzeczy związanych z liczbą mnogą, którą generują z automatu. Tutaj mały przykład po tłumaczeniach.

Załóżmy że akcja ‘widok’ = :new, a ‘odczyt’ = :show, :new np. do wyświetlenia formularza.

[code=ruby]# config/routes.rb - potrzebujesz utworzyć ścieżki do tych 3 akcji
resources :users, only: [:new, :create, :show]

następujące widoki w

- app/views/users/show.html.erb - twój odczyt.html.erb

- app/views/users/new.html.erb - twój formularz

<%= form_for @user do |f| %>

<% end %>

app/models/user.rb - nie potrzebujesz attr_accessor o ile masz poprawnie stworzone tabele

class User < ActiveRecord::Base
validates_length_of :imie, :in => 8…16
end

app/controllers/users_controller.rb - nie musisz definiować pustych akcji, jak tutaj :show i :new, o ile masz widoki do tych akcji w app/views/users/

class UsersController < ApplicationController
def show
end

def new
end

def create
@user = User.new(params[:urzytkownicy])

if @user.save
  redirect_to @user # powinno wygenerować odpowiednią ścieżkę w innym wypadku użyj ścieżki user_path(@user)
else
  render :new
end

end
end[/code]
W kontrolerze jeżeli user zostanie poprawnie zapisany, to przekieruje cię do akcji show nowo stworzonego użytkownika, w innym wypadku na nowo wygeneruje formularz, gdzie pod f.error(:imie) możesz mieć np błędy walidacji. Oczywiście można by było tu parę rzeczy poprawić, ale na razie starczy ;]

Wiecie co? Trochę od d*py strony za przeproszeniem zacząłem naukę Railsów. Ruby to język obiektowy, ROR też. Zacząłem przeglądać podstawy programowania obiektowego i już wiele podstawowych zagadnień w ROR rozumiem. Generalnie każdemu początkującemu polecam NAJPIERW naukę Ruby’ego lub OBOWIĄZKOWO zrozumienie istoty programowania obiektowego, zaczynałem bez tej wiedzy…

Ruby on Rails to nie jest język programowania.
Z meritum w zasadzie się zgadzam. Sam najpierw opanowałem podstawy Ruby’ego, dopiero później podstawy Railsów, a jak już zacząłem w tym pracować, poświęciłem b. dużo czasu żeby poznać Ruby w stopniu zadowalającym. Moim zdaniem - opłaca się.