Frage

Ich bin neu in Ruby on Rails, habe ich die Tutorial Blog.

Ich versuche jetzt, eine weitere Aktion an die Steuerung, die so genannten ‚Start‘.

hinzufügen
def start
end

Ich habe eine Ansichtsseite "app / views / posts / start.html.erb" enthält nichts anderes als einfache HTML hinzugefügt.

Wenn ich zu / posts gehen / starte ich die folgende Fehlermeldung erhalten.

ActiveRecord::RecordNotFound in PostsController#show 
Couldn't find Post with ID=start

ich den Fehler zu verstehen, wird die Show Aktion wird ausgeführt und starten ist keine gültige ID. Warum nicht die Startaktion ausgeführt werden soll, ist es ein Teil der MVC-Architektur oder Konfiguration, die ich fehle?

Unten ist mein posts_controller.rb

class PostsController < ApplicationController

  # GET /posts/start
  def start
  end

  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.find(:all)
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

  # GET /posts/1
  # GET /posts/1.xml
  def show
    @post = Post.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end

end

Ja, ich habe den Server neu gestartet und versucht, es mit Mongrel und webrick.

War es hilfreich?

Lösung

Ihre Routing nicht eingerichtet ist, diesen Weg zu ermöglichen. Vorausgesetzt, dass Sie das Standard-Gerüst verwenden, setzen Sie diese Zeile vor die map.resources :posts Zeile in config / routes.rb:

map.connect "posts/:action", :controller => 'posts', :action => /[a-z]+/i

Die Regex für :action schränkt es nur a-z (zu vermeiden Dinge wie / posts / 1 Fang). Es kann verbessert werden, wenn Sie Unterstreichen oder Zahlen in Ihren neuen Aktionen benötigen.

Andere Tipps

Der Fehler Sie machen ist eigentlich ein ziemlich allgemeiner.

Grundsätzlich Rails Karten automatisch URLs für Gerüste. Also, wenn Sie die Beiträge Gerüste geschaffen, Rails ist die Abbildung der URL Routen für sie. Ein solcher Weg ist die URL für die Anzeige eines einzelnen Beitrag: / posts / (post_id)

Also, wenn Sie die URL / posts sind Eingabe / Start-Rails denkt, dass Sie sagen: „Hey, gib mir die Post mit ID = beginnen. So Rails beklagt, dass die Show-Methode nicht einen Beitrag mit einer solchen ID finden .

Eine schnelle Möglichkeit, dies zu beheben ist Ihre config / routes.rb um sicherzustellen, dass die Strecke für die Startaktion vor den Gerüsten Routen hat:

# Route for start action
map.connect '/posts/start', :controller => 'posts', :action => 'start'
# Default mapping of routes for the scaffold
map.resources :posts

Wie auch immer, hofft das hilft.

Auf Schienen 4.x verwenden:

get '/posts/start', :controller => 'posts', :action => 'start'

Auf Schienen 3.x Verwendung:

match '/posts/start', :controller => 'posts', :action => 'start'

statt

map.connect '/posts/start', :controller => 'posts', :action => 'start'

es gelöst mein Problem.

Versuchen Sie diese, wenn Sie mit Schienen 3.0.3

in Ihrem route.rb

 resource :posts do
   collection do
     get 'start'
   end
 end

Dies könnte helfen,

Ich möchte sagen, manchmal Rails wird klebrig mit Routen-Caching, auch in der Entwicklung Umwelt.

Es kann auf starten Sie den Rails-Server helfen. Das hat für mich mehrere Male gearbeitet, als ich zählen kann, wenn diese Fehler zu erhalten.

Das funktioniert:

map.resource :post, :collection => { :my_action => :get}

fand ich die Lösung für mein Problem, in der routes.rb Datei, in der

map.resource :post

Ich habe mit der Sammlung Argumente, so blieb es auf diese Weise:

map.resource :post, :collection => { :my_action => :get}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top