2 tabele w 1 formularzu

Cześć

Potrzebuję pomocy w kwestii mojego projektu. Mam utworzone dwie tabele/modele Students (posiada kolumnę UserId) i Users. Są one ze sobą połączone relacją Stuents belongs_to user. Chcę teraz w formularzu studenta new mieć możliwośc korzystania z pól objektu Users, czyli mieć:

add new student<

Student.index: ____
User.name: ____
User.surname: _____
User.email: ______

[create]

tak by następnie w kontrolerze studenta można było dodać nowego usera z danych podanych w formularzu.

Mój kod na razie wygląda następująco:

students/_form.html.erb:

<%= form_for(@student) do |f| %>
<% if @student.errors.any? %>


<%= pluralize(@student.errors.count, “error”) %> prohibited this student from being saved:

  <ul>
  <% @student.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>

<% end %>

<%= f.label :index %>
<%= f.number_field :index %>

<%= fields_for :user_id, @user do |user| %>


<%= user.label :name %>

<%= user.text_field :name %>


<%= user.label :surname %>

<%= user.text_field :surname %>


<%= user.label :email %>

<%= user.text_field :email %>

<% end %>
<%= f.submit %>
<% end %>

Nie mam pojęcia czy jestem blisko rozwiązania.

Czy ktoś jest w stanie mi pomóc?

To nie jest ralacja 1-do-n czy tam 1-do-1 tylko relacja dziedziczenia (Student is a User). Poszukaj “STI Rails” w Rails Guides albo w Google.

Ale z tego co czytam, to stosuje się to wtedy kiedy mamy te same parametry w obiektach. Np, Employee (Administrator, Editor). A przecież mój student ma swój numer indeksu, a prowadzący swój tytuł naukowy. Jeśli by nawet uznać coś za co można się zabrać, to jak uzyskać dostęp wtedy do imienia prowadzącego z pozycji kursu. Wtedy w tabeli Courses, będzie kolumna nadal teacher_Id? I wystarczy w widoku użyć zwykłej kropki, tzn. course.teacher.user.name ?

Raczej powiedziałbym, że wtedy kiedy mamy częśc wspólnych atrybutów i zachowań.

course.teacher.name a lepiej course.teacher_name z powodu http://en.wikipedia.org/wiki/Law_of_Demeter

IMHO lepiej się projektuje modele i powiazania miedzy nimi jesli nie zastanawiasz się jak to bedzie wygladalo w tabelkach w bazie danych

Raczej powiedziałbym, że wtedy kiedy mamy częśc wspólnych atrybutów i zachowań.[/quote]
No to i nawet, to jak przetrzymywać to w bazie? Da się je trzymać osobno? Jeśli tak to połowa sukcesu, jeśli da się tylko razem, to komplikuje sprawę.

course.teacher.name a lepiej course.teacher_name z powodu http://en.wikipedia.org/wiki/Law_of_Demeter

IMHO lepiej się projektuje modele i powiazania miedzy nimi jesli nie zastanawiasz się jak to bedzie wygladalo w tabelkach w bazie danych[/quote]
Lepiej? Bazę to się powinno projektować przed wszystkim innym. W tym momencie chciałbyś z powodu Prawa Demeter trzymać imię, nazwisko, e-mail, haslo, tytuł prowadzącego w tabeli prowadzącego. A osobno imię nazwisko, e-mail, hasło, indeks w tabeli studenta. Wiesz… jak dla mnie to głupota.

W takim wypadku się robi delegację po prostu:

delegate :name, :to => :teacher, :prefix => true

Raczej powiedziałbym, że wtedy kiedy mamy częśc wspólnych atrybutów i zachowań.[/quote]
No to i nawet, to jak przetrzymywać to w bazie? Da się je trzymać osobno? Jeśli tak to połowa sukcesu, jeśli da się tylko razem, to komplikuje sprawę.[/quote]
STI polega na tym ze oba modele sa w tej samej tabeli, czesc pol jest pustych i dochodzi pole okreslajace typ obiektu (defaultowo type a AR). ActiveRecord robi to zupelnie przezroczyscie. Wystarczy ze jeden model dziedziczy po innym.

Może zamiast relacji czy dziedziczenia zastanów jakie zachowania dziala student i wykladowca i wydziel je do oddzielnych obiektów lub modułów.

Lepiej? Bazę to się powinno projektować przed wszystkim innym.[/quote]
Czyli wg ciebie nie moze istniec model bez tabeli w bazie? I model powinien wystawiać dalej wszystkie kolumny jakie ma ma w tabeli? Moim zdaniem to zła droga.

Możesz uzyć delegacji z ActiveSupport (http://apidock.com/rails/Module/delegate), Forwardable ze StdLib (http://ruby-doc.org/stdlib-1.9.2/libdoc/forwardable/rdoc/Forwardable.html) lub napisać własne metody

Właściwie to powstał troche off topic o twoim złym designie.

Prawdopodobnie chialeś osiągąć coś opisanego tutaj: http://weblog.rubyonrails.org/2009/1/26/nested-model-forms

Post dosyć stary więc mogło się coś zmienić w składni.