【问题标题】:Error when editing a page: param is missing or the value is empty: static_page编辑页面时出错:参数丢失或值为空:static_page
【发布时间】:2016-09-10 01:08:16
【问题描述】:

我很难为我的页面创建路由。我已经展示了哪些有效,但编辑不断弹出错误。当前代码是对这个railscast 以及友好ID gem 的修改。如果你能提供帮助,谢谢。

这里是控制器:

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

路线如下:

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

这是在 form.html.haml 上不断弹出错误的表单:

= 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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 routing


    【解决方案1】:

    在您的路线中,您有:

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

    您向更新操作发送 GET 请求的位置,而不是您的编辑操作。

    将其更改为:

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

    您还将相同的 get :slug 路由设置为两个不同的操作。指向销毁操作的应该是 DELETE 请求而不是 GET 请求。

    还有一点,您可以从控制器编辑操作中删除 @static_page = StaticPage.find_by_slug(params[:slug]),因为您已经在 before_action 的 set_static_page 中设置了 @static_page 变量。

    【讨论】:

    • 非常感谢...就是这样!
    • 很高兴为您提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多