我收到此错误,说明未定义的方法更新。 show和Edit按钮效果很好。这只是更新无效。我正在使用friendly_id,控制器是支架,具有更好的路由。
这是我的路线:
Rails.application.routes.draw do
resources :static_pages, except: [:show, :edit]
devise_for :users
mount Bootsy::Engine => '/bootsy', as: 'bootsy'
get 'profile' => "users#profile"
root 'indexes#index'
get ':slug', to: 'static_pages#show'
get ':slug/edit', to: 'static_pages#edit'
# 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
以下是更新方法的静态页面控制器:
class StaticPagesController < ApplicationController
before_action :set_static_page, only: [:show, :edit, :update]
before_action :static_page_params, only: [:update, :create]
before_action :destroy_static_page, only: :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
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
def destroy_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, :video_id, :content, :tags, :author, :date, :slug)
end
end
以下是编辑页面搭建的视图:
%h1 Editing static_page
= render 'form'
= link_to 'Show', @static_page
\|
= link_to 'Back', static_pages_path
编辑:这与我的路线有关。我无法让show按钮在4m波纹管上工作。我尝试@ static_page.slug,但这需要我到/ page_name / page_name。当我执行@static_page时,它会将我带到/ static_page / page_name。我需要它做的是带我到/ page_name。
编辑2:这是表格部分:
= simple_form_for(@static_page) do |f|
= f.error_notification
.form-inputs
= f.input :title
= f.input :video_id
.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
答案 0 :(得分:1)
您正在致电@static_page.update(static_page_params)
,但在这种情况下,@static_page
为零。
您已将@static_page
定义为@static_page = StaticPage.find_by_slug(params[:slug])
,但如果找不到包含该子弹的网页,则会返回nil
。
有两种方法可以解决这个问题:
find_by_slug!
代替,如果没有找到记录,则会引发异常,或者:nil
是否存在,并决定如何处理它。