--- layout: post title: Rails à moda do Porto — Episódio 3 tags: - Development - Português - rails - screencast status: publish type: post published: true meta: _edit_last: '1' --- A parte mais importante de uma aplicação: pô-la a trabalhar. Como? Construindo lógica para satisfazer as necessidades do negócio. Neste episódio constrói-se uma relação entre dois modelos: Aluno com Disciplina através de um novo modelo: Nota. Foi um bocado difícil por tudo a funcionar mas espero que consigam assimilar o conceito de relações, dado o contexto. Existem outras situações com certeza e terão a sua ocasião de serem abordadas. Se por alguma razão não conseguirem compreender o procedimento, comentem em baixo ou mandem-me um email com a vossa dúvida, terei o maior gosto em explicar.

Código

script/generate scaffold disciplina nome:string creditos:integer
script/generate model nota valor:integer aluno_id:integer disciplina_id:integer
class Nota < ActiveRecord::Base
	belongs_to :aluno
	belongs_to :disciplina
end

class Disciplina < ActiveRecord::Base
	has_many :alunos, :through => :notas
	has_many :notas
end

class Aluno < ActiveRecord::Base
	has_many :disciplinas, :through => :notas
	has_many :notas
end
# atribuir_disciplinas.html.erb

<% form_for @aluno do |f| %>
	<% for disciplina in Disciplina.all do %>
	<p>
		<%= label_tag "", disciplina.nome %>
		<%= check_box_tag "aluno[disciplina_ids][]", disciplina.id, @aluno.disciplinas.include?(disciplina) %>
	</p>
	<% end %>
	<%= f.submit "Atribuir" %>
<% end %>

# alunos/show.html.erb

<ul>
	<% for aluno in @disciplina.alunos do%>
		<li><%= aluno.primeironome %> <%= aluno.ultimonome %></li>
	<% end %>
</ul>