【问题标题】:Ruby Error ActiveRecord::RecordNotFoundRuby 错误 ActiveRecord::RecordNotFound
【发布时间】:2014-04-08 05:29:28
【问题描述】:

您要查找的页面不存在。您可能输入了错误的地址或页面可能已移动。

错误日志:

Started GET "/ru" for 0.0.0.0 at 2014-04-08 08:03:02 +0300
  Processing by PagesController#main as HTML
  Parameters: {"locale"=>"ru"}
Completed 404 Not Found in 14ms

ActiveRecord::RecordNotFound (Couldn't find Page with id=4):
  app/controllers/pages_controller.rb:9:in `main'

pages_controller:

class PagesController < ApplicationController

  before_filter :authenticate, :only => [:index, :show, :new, :edit, :create, :update, :destroy ]
  caches_page :main, :about, :showreal, :projects, :contacts, :reject
  caches_action :index, :show, :new

  def main    
    @page = case I18n.locale.to_s
      when 'ru'; Page.find(4)
      when 'zh'; Page.find(6)  
      else Page.find(2)
    end
    base = 'app/assets/videos/'    
    @video = Dir.glob(File.join(base, 'main', 'video.*')).first.sub!(base,"")    
    @preview = Dir.glob(File.join(base, 'main', 'preview.*')).first.sub!(base,"")
  end

  def about
    @body_class = 'leftbg'
    @page = case I18n.locale.to_s
      when 'ru'; Page.find(3)
      when 'zh'; Page.find(5)  
      else Page.find(1)
    end
  end

  def showreal
    base = 'app/assets/videos/'    
    @video = Dir.glob(File.join(base, 'showreal', 'video.*')).first.sub!(base,"")    
    @preview = Dir.glob(File.join(base, 'showreal', 'preview.*')).first.sub!(base,"")
  end

  def projects   
  end

  def contacts
    @body_class = 'leftbg'
  end

  def sent
    redirect_to :action => "reject" and return unless request.post?

    @body_class = 'leftbg'

    if request.POST.include? 'name'
      @name = request.params['name']
    end
    if request.POST.include? 'email'
      @email   = request.params['email']
    end
    if request.POST.include? 'phone'
      @phone   = request.params['phone']
    end
    if request.POST.include? 'message'
      @message = request.params['message']
    end

    if ['name','email','phone','message'].all? {|i| request.POST.include?(i)}
      ContactMailer.contacts_email(@name,@email,@phone,@message).deliver
    else
      flash[:error] = 'You must complete all fields!'
      return render :action => "contacts"
    end
  end

  def reject
    @body_class = 'leftbg'
  end  

  # GET /pages
  # GET /pages.json
  def index
    @pages = Page.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @pages }
    end
  end

  # GET /pages/1
  # GET /pages/1.json
  def show
    @page = Page.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @page }
    end
  end

  # GET /pages/new
  # GET /pages/new.json
  def new
    @page = Page.new
    expire_page :action => [:main, :about]
    expire_action :action => [:index, :show]

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @page }
    end
  end

  # GET /pages/1/edit
  def edit
    @page = Page.find(params[:id])
  end

  # POST /pages
  # POST /pages.json
  def create
    @page = Page.new(params[:page])

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

  # PUT /pages/1
  # PUT /pages/1.json
  def update
    @page = Page.find(params[:id])
    expire_page :action => [:main, :about]
    expire_action :action => [:index, :show] 

    respond_to do |format|
      if @page.update_attributes(params[:page])
        format.html { redirect_to @page, notice: 'Page was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @page.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /pages/1
  # DELETE /pages/1.json
  def destroy
    @page = Page.find(params[:id])
    @page.destroy
    expire_page :action => [:main, :about]
    expire_action :action => [:index, :show]

    respond_to do |format|
      format.html { redirect_to pages_url }
      format.json { head :ok }
    end
  end
end

可能是什么问题? 一个程序员下班后停止了所有工作,他正在对缓存做一些事情。

【问题讨论】:

  • 您在 pages 表中有 :id = 4 的记录吗?

标签: ruby-on-rails ruby


【解决方案1】:

问题来了

@page = Page.find(2)

不要使用find,而是使用where

@page = Page.where("id =?", 2).first

然后您可以应用检查

if @page.blank?
  #do something
else
  #do something else
end

这里是更新

@page = case I18n.locale.to_s
  when 'ru'; Page.where("id =?", 4).first
  when 'zh'; Page.where("id =?", 6).first
  else Page.where("id =?", 6).first
end

【讨论】:

  • 要嵌入哪一行?可以给一个现成的代码吗?
  • 你在哪里使用find,查看我更新的答案
  • 通过搜索没有找到可以请给一个现成的代码吗?
  • xxx.com/ru/pages#main - 有效,但要求输入密码 xxx.com/ru/ - 无效。
  • PagesController#main 处理为 HTML 参数:{"locale"=>"ru"} Completed 404 Not Found in 1ms ActiveRecord::RecordNotFound (Couldn't find Page with id=4): app /controllers/pages_controller.rb:9:in `main'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2017-04-19
相关资源
最近更新 更多