Routing, verschachtelte Ressourcen und passender controller
Ich habe ein problem die letzten Tage auch immer meine verschachtelten Ressourcen zu erstellen und richtig angezeigt. Es gibt haufenweise ähnliche Fragen auf StackOverflow und viele der blog-Beiträge auf dieser, aber Sie scheinen alle zu beschäftigen mit einer älteren version von Rails oder einem anderen Problem. Ich bin an dem Punkt, wo, wenn ich endlich ein Problem lösen, ein weiterer Fehler taucht auf. Ich habe es eingeengt zu mir, macht einen dummen Fehler oder Tippfehler zu unerfahren, um zu bemerken.
Habe ich ein Jobs-Modell, das gehört zu einem Veranstaltungsort Modell. Der Ort funktioniert gut und ich habe sogar mitbekommen, wie weit Sie in der Lage zu gehen, um meine verschachtelten Jobs-index unter jeder Ort auf und bringt die Neuen und Bearbeiten von Formularen, sondern geht auf 'Show' oder der Erstellung eines neuen Auftrags verursacht eine undefined method
Fehler. Nach viel recherche fand ich viele mit dem gleichen problem und habe versucht zu implementieren behebt, aber jetzt bin ich ein Routing Fehler.
Meisten meiner verwirrenden kommt aus, wenn Sie zu verlassen, aus dem @, wenn, um zu verwenden :venue_id statt :id params, etc. Jedes Beispiel sehe ich zu haben scheint, eine andere Art und Weise und ich kann nicht scheinen, um alle von Ihnen arbeiten für mich.
Jedem Stoß in die richtige Richtung wäre sehr hilfreich.
Die Routing-Fehler
No route matches {:action=>"show", :controller=>"jobs", :venue_id=>#<Venue id: 1, name: "Burger Chef", city: "Chicago", state: "Illinois", areacode: 60614, created_at: "2013-02-05 21:33:41", updated_at: "2013-02-06 23:01:05", avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil>}
Routen.rb
Twist::Application.routes.draw do
resources :users
devise_for :users
resources :venues do
resources :jobs
end
end
jobs_controller.rb
class JobsController < ApplicationController
# GET /jobs
# GET /jobs.json
before_filter :get_venue
def get_venue
@venue = Venue.find(params[:venue_id])
end
def index
@jobs = @venue.jobs
respond_to do |format|
format.html # index.html.erb
format.json { render json: @jobs }
end
end
# GET /jobs/1
# GET /jobs/1.json
def show
@job = @venue.job.find(params[:id])
if params[:id]
@venue = Venue.where(:id => params[:id]).first
@jobs = @venue.job_url
else
@jobs = Jobs.all
end
respond_to do |format|
format.html # show.html.erb
format.json { render json: @job }
end
end
# GET /jobs/new
# GET /jobs/new.json
def new
@job = @venue.jobs.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @job }
end
end
# GET /jobs/1/edit
def edit
@job = @venue.job.find(params[:venue_id])
end
# POST /jobs
# POST /jobs.json
def create
@job = @venue.jobs.new(params[:job])
respond_to do |format|
if @job.save
format.html { redirect_to :action => :show, :id => @venue.id,
notice: 'Job was successfully created.' }
format.json { render json: [@venue, @job],
status: :created,
location: [@venue, @job] }
else
format.html { render action: "new" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
# PUT /jobs/1
# PUT /jobs/1.json
def update
@job = Job.find(params[:id])
respond_to do |format|
if @job.update_attributes(params[:job])
format.html { redirect_to @job, notice: 'Job was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
# DELETE /jobs/1
# DELETE /jobs/1.json
def destroy
@job = Job.find(params[:id])
@job.destroy
respond_to do |format|
format.html { redirect_to jobs_url }
format.json { head :no_content }
end
end
end
venues_controller.rb
class VenuesController < ApplicationController
# GET /venues
# GET /venues.json
def index
@venues = Venue.all
if params[:name]
@user = User.where(:name => params[:name]).first
@venues = @user.venues
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @venues }
end
end
# GET /venues/1
# GET /venues/1.json
def show
@venue = Venue.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @venue }
end
end
# GET /venues/new
# GET /venues/new.json
def new
@venue = Venue.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @venue }
end
end
# GET /venues/1/edit
def edit
@venue = Venue.find(params[:id])
#if session[:user_id] != @venue.user_id
# flash[:notice] = "Sorry, you cannot edit this venue."
# redirect_to(venues_path)
# =>end
end
# POST /venues
# POST /venues.json
def create
@venue = Venue.new(params[:venue_id])
respond_to do |format|
if @venue.save
format.html { redirect_to @venue, notice: 'Venue was successfully created.' }
format.json { render json: @venue, status: :created, location: @venue }
else
format.html { render action: "new" }
format.json { render json: @venue.errors, status: :unprocessable_entity }
end
end
end
# PUT /venues/1
# PUT /venues/1.json
def update
@venue = Venue.find(params[:id])
respond_to do |format|
if @venue.update_attributes(params[:venue])
format.html { redirect_to @venue, notice: 'Venue was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @venue.errors, status: :unprocessable_entity }
end
end
end
# DELETE /venues/1
# DELETE /venues/1.json
def destroy
@venue = Venue.find(params[:id])
@venue.destroy
respond_to do |format|
format.html { redirect_to venues_url }
format.json { head :no_content }
end
end
end
job.rb
class Job < ActiveRecord::Base
attr_accessible :description, :name, :requirement, :venue_id
validates :name, :presence => true, :length => { :minimum => 3 }
belongs_to :venue
end
Veranstaltungsort.rb
class Venue < ActiveRecord::Base
attr_accessible :areacode, :avatar, :city, :name, :state
has_many :jobs
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
/jobs/anzeigen.html-Code.erb
<p id="notice"><%= notice %></p>
<% @job = Job.find(param[:venue_id]) %>
<p>
<b>Name:</b>
<%= @job.name %>
</p>
<p>
<b>Company:</b>
<p><%= @venue.name %></p>
<p><%= link_to @job.venue.name, venue_path(@venue) %></p>
<p>
<b>Job:</b>
<%= @job.job_id %>
</p>
<p>
<b>Description:</b>
<%= @job.description %>
</p>
<p>
<b>Requirement:</b>
<%= @job.requirement %>
</p>
<%= link_to 'Edit', edit_venue_job_path(@venue, @job) %> |
<%= link_to 'Back', venue_jobs_path(@venue, @job) %>
**/jobs/index.html.erb**
<div class="usergrid">
<% jobs = @venue.jobs %>
<% @venue.jobs.each do |job| %>
<div class = "user venue">
<p>
<h2><%= link_to job.name, venue_job_path(@venue) %></h2>
<%= link_to 'Edit', edit_venue_job_path(@venue, job) %><br/>
<%= link_to 'Delete', venue_jobs_path(@venue, @job), :confirm => 'Are you sure?', :method => :delete %>
</div>
<% end %>
<div style="clear:both"></div>
</div>
<%= link_to 'New Job', new_venue_job_path(@venue) %>
Merke ich, dass...
- Könnte dies ein offensichtlich wirklich fix, sondern wird neu in Rails gibt es definitiv noch einige Grundlagen, die ich nicht ganz verstehen.
- Wenn ich gebucht, zu viel oder zu wenig code lassen Sie es mich bitte wissen, ich bin nicht ganz sicher, wie viel ist die am wenigsten dafür notwendig.
- Es kann auch mehr als ein Fehler, es könnte eine Menge von Fehlern, und viele von Ihnen verursacht worden sein könnte, indem Sie mich versuchen, dies zu beheben, wenn ich wirklich nicht wusste, was ich Tat. Ich wollte dieses Problem zu beheben selbst, aber ich kann damit nicht umgehen messing mit ihm mehr, wenn ich wirklich nur macht es schlimmer.
Ich habe versucht, messing mit den Routen, die änderung der tatsächlichen verbindungen und Strecken, messing mit Rahmen, und wie viele der häufigsten Updates für diesen Fehler, die ich finden konnte und keiner von Ihnen schien zu helfen.
Dank!
- Kann man mehr von einem stacktrace? Es sieht aus wie Sie sind, indem Sie Ihre Modell anstelle Ihrer model_id, um Ihre Routen.
- dies sollte nicht ein problem sein, als wenn ein url_helper erhält eine Instanz, wenn es erwartet eine id, wird es versuchen, zu nennen
#to_param
die standardmäßig für die AR-Objekte gibt die id
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler zu sagen, dass es keine route für den angegebenen params :
Können Sie überprüfen, dass durch ausführen von rake routes, und Sie werden sehen, dass, wie Arbeitsplätze ist verschachtelt unter den Veranstaltungsort, die
jobs#show
controller-Aktionen werden zwei Parameter benötigt : dervenue_id
(das ist die Aufgabe der "Eltern") und dieid
was ist der job-id.Habe ich schnell überprüft Ihren code, und ich denke, dass eines der Dinge, die den Fehler verursacht diese Zeile :
sollte dies
Grundsätzlich erhalten Sie, die Art von Fehler, wenn Sie jetzt versuchen zu machen einen link zu einer job-ohne Angabe der location.
Lassen Sie mich wissen, wenn Sie weitere Einzelheiten benötigen oder für weitere Informationen.