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...

  1. Könnte dies ein offensichtlich wirklich fix, sondern wird neu in Rails gibt es definitiv noch einige Grundlagen, die ich nicht ganz verstehen.
  2. 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.
  3. 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
InformationsquelleAutor Jason | 2013-02-07
Schreibe einen Kommentar