2016-09-10 1 views
0

Ich habe es schwer, die Routen zu meinen Seiten zu erstellen. Ich habe gezeigt, was funktioniert, aber die Bearbeitung kommt immer mit einem Fehler auf. Der aktuelle Code ist eine Modifikation dieser railscast zusammen mit der freundlichen ID gem. Danke, wenn du helfen kannst. HierFehler beim Bearbeiten einer Seite: Parameter fehlt oder der Wert ist leer: static_page

ist der Controller:

class StaticPagesController < ApplicationController 
    before_action :set_static_page, only: [:show, :edit, :update, :destroy] 
    before_filter :except => [:show] do 
    redirect_to :new_user_session unless current_user && current_user.role == 5 
    end 

    # GET /static_pages 
    # GET /static_pages.json 
    def index 
    @static_pages = StaticPage.all 
    end 

    # GET /static_pages/1 
    # GET /static_pages/1.json 
    def show 
    end 

    # GET /static_pages/new 
    def new 
    @static_page = StaticPage.new 
    end 

    # GET /static_pages/1/edit 
    def edit 
    @static_page = StaticPage.find_by_slug(params[:slug]) 
    end 

    # POST /static_pages 
    # POST /static_pages.json 
    def create 
    @static_page = StaticPage.new(static_page_params) 

    respond_to do |format| 
     if @static_page.save 
     format.html { redirect_to @static_page, notice: 'Static page was successfully created.' } 
     format.json { render :show, status: :created, location: @static_page } 
     else 
     format.html { render :new } 
     format.json { render json: @static_page.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /static_pages/1 
    # PATCH/PUT /static_pages/1.json 
    def update 
    respond_to do |format| 
     if @static_page.update(static_page_params) 
     format.html { redirect_to @static_page, notice: 'Static page was successfully updated.' } 
     format.json { render :show, status: :ok, location: @static_page } 
     else 
     format.html { render :edit } 
     format.json { render json: @static_page.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /static_pages/1 
    # DELETE /static_pages/1.json 
    def destroy 
    @static_page.destroy 
    respond_to do |format| 
     format.html { redirect_to static_pages_url, notice: 'Static page was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_static_page 
     @static_page = StaticPage.find_by_slug(params[:slug]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def static_page_params 
     params.require(:static_page).permit(:title, :permalink, :content, :tags, :author, :date) 
    end 
end 

Hier wird die Route ist:

Rails.application.routes.draw do 

    resources :static_pages, except: [:show, :delete, :update] 

    devise_for :users 

    mount Bootsy::Engine => '/bootsy', as: 'bootsy' 

    get 'profile' => "users#profile" 

    root 'indexes#index' 

    get ':slug', to: 'static_pages#show' 

    get ':slug', to: 'static_pages#delete' 

    get ':slug/edit', to: 'static_pages#update' 

    # The priority is based upon order of creation: first created -> highest priority. 
    # See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    # root 'welcome#index' 

    # Example of regular route: 
    # get 'products/:id' => 'catalog#view' 

    # Example of named route that can be invoked with purchase_url(id: product.id) 
    # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 

    # Example resource route (maps HTTP verbs to controller actions automatically): 
    # resources :products 

    # Example resource route with options: 
    # resources :products do 
    #  member do 
    #  get 'short' 
    #  post 'toggle' 
    #  end 
    # 
    #  collection do 
    #  get 'sold' 
    #  end 
    # end 

    # Example resource route with sub-resources: 
    # resources :products do 
    #  resources :comments, :sales 
    #  resource :seller 
    # end 

    # Example resource route with more complex sub-resources: 
    # resources :products do 
    #  resources :comments 
    #  resources :sales do 
    #  get 'recent', on: :collection 
    #  end 
    # end 

    # Example resource route with concerns: 
    # concern :toggleable do 
    #  post 'toggle' 
    # end 
    # resources :posts, concerns: :toggleable 
    # resources :photos, concerns: :toggleable 

    # Example resource route within a namespace: 
    # namespace :admin do 
    #  # Directs /admin/products/* to Admin::ProductsController 
    #  # (app/controllers/admin/products_controller.rb) 
    #  resources :products 
    # end 
end 

Hier ist die Form, in der der Fehler poping auf form.html.haml hält:

= simple_form_for(@static_page) do |f| 
    = f.error_notification 

    .form-inputs 
    = f.input :title 
    = f.input :permalink 
    .bootsy_text_area 
     = f.bootsy_area :content, :class => 'form-control', rows: 12 
    = f.input :tags 
    = f.input :author 
    = f.input :date 

    .form-actions 
    = f.button :submit 

Antwort

1

In Ihren Routen haben Sie:

get ':slug/edit', to: 'static_pages#update' 

Hier senden Sie eine GET-Anfrage an Ihre Update-Aktion und nicht an Ihre Bearbeitungsaktion.

Ändern Sie diesen an:

get ':slug/edit', to: 'static_pages#edit' 

Sie sind auch als auch die gleiche get :slug Route auf zwei verschiedene Aktionen zu setzen. Derjenige, der auf die Aktion "destroy" verweist, sollte eine DELETE-Anfrage und nicht eine GET-Anfrage sein.

Eine weitere Sache, können Sie @static_page = StaticPage.find_by_slug(params[:slug]) von Ihrem Controller bearbeiten Aktion entfernen, da Sie bereits die @static_page Variable in Ihrem set_static_page in Ihrer before_action Einstellung.

+0

Vielen Dank ... das war's! – Jakxna360

+0

Froh, zu helfen :) – asalgan

Verwandte Themen