Witam Wszystkich
Railsa ucze się dopiero od kilku tygodni z książki ‘Ruby on Rails. Wprowadzenie’, i po ‘przerobieniu’ zamieszczonej w niej aplikacji chciałem sam coś stworzyć. Utworzyłem sobie dwa modele - person i auto. Tworzę nową osobę z poziomu przegladarki (tak samo jak kilka autek) i teraz chciałbym aby podczas edytowania stworzonej osoby móc przypisać jej jakieś auto/auta z listy. Starałem się coś kombinować z przykładu zamieszczonego w książce ale nic mi nie działa. Zamieszczę te pliki w formie ‘bez kombinowania’ i miałbym prośbę, żeby ktoś napisał co dokładnie dopisać do nich, żeby ładnie ta prosta czynność działała rails w wersji 1.2.6, baza mySQL pod linuksem.
[code]class CreatePeople < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column “name”, :string
end
end
def self.down
drop_table :people
end
end[/code]
[code]class CreateAutos < ActiveRecord::Migration
def self.up
create_table :autos do |t|
t.column “model”, :string
t.column “person_id”, :integer
end
end
def self.down
drop_table :autos
end
end[/code]
class Auto < ActiveRecord::Base
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :autos
end
[code]class PeopleController < ApplicationController
def index
list
render :action => ‘list’
end
GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
def list
@person_pages, @people = paginate :people, :per_page => 10
end
def show
@person = Person.find(params[:id])
end
def new
@person = Person.new
end
def create
@person = Person.new(params[:person])
if @person.save
flash[:notice] = ‘Person was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end
def edit
@person = Person.find(params[:id])
end
def update
@person = Person.find(params[:id])
if @person.update_attributes(params[:person])
flash[:notice] = ‘Person was successfully updated.’
redirect_to :action => ‘show’, :id => @person
else
render :action => ‘edit’
end
end
def destroy
Person.find(params[:id]).destroy
redirect_to :action => ‘list’
end
end[/code]
[code]<% for column in Person.content_columns %>
<%= column.human_name %>: <%=h @person.send(column.name) %>
<% end %><%= link_to ‘Edit’, :action => ‘edit’, :id => @person %> |
<%= link_to ‘Back’, :action => ‘list’ %>[/code]
[code]
Editing person
<% form_tag :action => ‘update’, :id => @person do %>
<%= render :partial => ‘form’ %>
<%= submit_tag ‘Edit’ %>
<% end %>
<%= link_to ‘Show’, :action => ‘show’, :id => @person %> |
<%= link_to ‘Back’, :action => ‘list’ %>[/code]
–Edit
Oczywiście ‘wykorzystywać’…