Ich habe zwei Controller: Projekte und Stufen.Wie zeige ich alle Phasen (ein Modell) an, die zu einem Projekt (einem anderen Modell) in Rails 3 gehören?
Projekte hat viele Stufen und Bühnen gehört zu Projekten. Ich möchte, wenn Sie auf den Namen des Projekts (d. H. Die Projekte zeigen Aktion) klicken, um alle Phasen zu diesem Projekt anzuzeigen.
Wie mache ich das?
Stages Controller
class StagesController < ApplicationController
filter_resource_access
# GET /stages
# GET /stages.xml
def index
@stages = Stage.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @stages }
end
end
# GET /stages/1
# GET /stages/1.xml
def show
@stage = Stage.find(params[:id])
#@project = Project.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @stage }
end
end
# GET /stages/new
# GET /stages/new.xml
def new
@stage = Stage.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @stage }
end
end
# GET /stages/1/edit
def edit
@stage = Stage.find(params[:id])
end
# POST /stages
# POST /stages.xml
def create
@stage = current_user.stages.create(params[:stage])
#@stage = Stage.new(params[:stage])
respond_to do |format|
if @stage.save
format.html { redirect_to(@stage, :notice => 'Stage was successfully created.') }
format.xml { render :xml => @stage, :status => :created, :location => @stage }
else
format.html { render :action => "new" }
format.xml { render :xml => @stage.errors, :status => :unprocessable_entity }
end
end
end
# PUT /stages/1
# PUT /stages/1.xml
def update
@stage = Stage.find(params[:id])
respond_to do |format|
if @stage.update_attributes(params[:stage])
format.html { redirect_to(@stage, :notice => 'Stage was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @stage.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /stages/1
# DELETE /stages/1.xml
def destroy
@stage = Stage.find(params[:id])
@stage.destroy
respond_to do |format|
format.html { redirect_to(stages_url) }
format.xml { head :ok }
end
end
end
Stages model:
# == Schema Information
# Schema version: 20101124095341
#
# Table name: stages
#
# id :integer not null, primary key
# project_id :integer
# created_at :datetime
# updated_at :datetime
# user_id :integer
# name :string(255)
# stage_num :integer
class Stage < ActiveRecord::Base
belongs_to :projects
#has_and_belongs_to_many :users
has_many :uploads
has_many :comments
end
Projects Model
# == Schema Information
# Schema version: 20101117094659
#
# Table name: projects
#
# id :integer not null, primary key
# name :string(255)
# description :string(255)
# designer_id :integer
# client_id :integer
# notified :boolean
# created_at :datetime
# updated_at :datetime
# user_id :integer
class Project < ActiveRecord::Base
belongs_to :user
has_many :stages
has_many :uploads
has_many :comments
#before_validation { |project| project.user = Authorization.current_user unless project.user }
end
Project Controller
class ProjectsController < ApplicationController
filter_resource_access
# GET /projects
# GET /projects.xml
def index
@projects = current_user.projects
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @projects }
end
end
# GET /projects/1
# GET /projects/1.xml
def show
@project = Project.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @project }
end
end
# GET /projects/new
# GET /projects/new.xml
def new
@project = Project.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @project }
end
end
# GET /projects/1/edit
def edit
@project = Project.find(params[:id])
end
# POST /projects
# POST /projects.xml
def create
@project = current_user.projects.create(params[:project])
respond_to do |format|
if @project.save
format.html { redirect_to(@project, :notice => 'Project was successfully created.') }
format.xml { render :xml => @project, :status => :created, :location => @project }
else
format.html { render :action => "new" }
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
end
end
end
# PUT /projects/1
# PUT /projects/1.xml
def update
@project = Project.find(params[:id])
respond_to do |format|
if @project.update_attributes(params[:project])
format.html { redirect_to(@project, :notice => 'Project was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
end
end
end
# DELETE /projects/1
# DELETE /projects/1.xml
def destroy
@project = Project.find(params[:id])
@project.destroy
respond_to do |format|
format.html { redirect_to(projects_url) }
format.xml { head :ok }
end
end
end
Projekte Show View
<p id="notice"><%= notice %></p>
<br />
<% @projects.each do |project| %>
<% @stages.each do |stage| %>
<tr>
<td><%= link_to stage.name, stage %> | </td>
<td><%= stage.stage_num %> | </td>
<td><%= link_to 'Show', stage %></td>
<td><%= link_to 'Edit', edit_stage_path(stage) %></td>
<td><%= link_to 'Destroy', stage, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
<% end %>
<% if permitted_to? :create, Stage.new %>
<%= link_to 'New Stage', new_stage_path %>
<% end %><br /><br />
<%= link_to 'Edit', edit_project_path(@project) %> |
<%= link_to 'Back', projects_path %>
Hrmm Aaron, sieht aus wie ich einen Fehler gemacht habe. Das sollte für die Stages Show View sein, nicht für die Projects Show View. Bedenkt das Edit, ändert das deine Antwort? Edit: Scratch dass ... nur noch einmal meinen Code überprüft und es stellt sich heraus, dass Sie Recht haben. Es war für die Projektschau, nicht für die Bühnen. – marcamillion
Btw Aaron, welchen Teil der Rails Guides kann ich gehen, um herauszufinden, wie man das macht? Ist das ein Teil der Modelle? Controller? Würde mich freuen, wenn Sie einen Link zur Verfügung stellen könnten. Vielen Dank. – marcamillion
Dies sind eher Kernkonzepte. Hast du schon gelesen: http://pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition das noch? Wenn nicht, würde ich dringend empfehlen, zuerst dieses Buch durchzugehen. Es vermittelt Ihnen ein solides Verständnis der meisten Kernkonzepte von Rails. –