【问题标题】:Sqlite on rails problem with relationsSqlite on rails 关系问题
【发布时间】:2010-08-04 21:05:57
【问题描述】:

在 Rails 上使用 sqlite3 时,我遇到了关系问题。

首先我搭建我的脚手架, 添加对迁移文件的引用, 将belongs_to has_many 添加到模型 而不是使用基本的 rake db:migrate 命令启动并运行我的数据库。

然后它不起作用, 我想有一个我无法弄清楚的缺失步骤:S

顺便说一下,我正在尝试在 Building Dynamic Web 2.0 上实现示例 talewiki 使用 Ruby on Rails 的网站,我在第 75 页。 例子在mysql上。

class GenresController < ApplicationController
  # GET /genres
  # GET /genres.xml
  def index
    @genres = Genre.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @genres }
    end
  end

  # GET /genres/1
  # GET /genres/1.xml
  def show
    @genre = Genre.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @genre }
    end
  end

  # GET /genres/new
  # GET /genres/new.xml
  def new
    @genre = Genre.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @genre }
    end
  end

  # GET /genres/1/edit
  def edit
    @genre = Genre.find(params[:id])
  end

  # POST /genres
  # POST /genres.xml
  def create
    @genre = Genre.new(params[:genre])

    respond_to do |format|
      if @genre.save
        format.html { redirect_to(@genre, :notice => 'Genre was successfully created.') }
        format.xml  { render :xml => @genre, :status => :created, :location => @genre }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @genre.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /genres/1
  # PUT /genres/1.xml
  def update
    @genre = Genre.find(params[:id])

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

  # DELETE /genres/1
  # DELETE /genres/1.xml
  def destroy
    @genre = Genre.find(params[:id])
    @genre.destroy

    respond_to do |format|
      format.html { redirect_to(genres_url) }
      format.xml  { head :ok }
    end
  end
end

【问题讨论】:

  • 究竟是什么不起作用?您看到了什么错误或行为?
  • ActiveRecord::RecordNotFound in GenresController#show 找不到 ID=tales 的流派
  • 您能在该控制器中显示show 操作的代码片段吗?看起来它可能在查找器中使用了错误类型的键
  • 我猜这行会造成问题,但为什么:S 但是如果你能建议一个关于“rails 中的 sqlite 关系”的好教程,我认为这对我们俩都会更好:D
  • 你的问题不太可能是Sqlite。对于这么简单的事情,它和 MySQL 一样好用。该错误意味着您将 ID 中的字符串而不是整数传递给查找器。可能使用了错误的params 条目。这就是我想看控制器代码的原因

标签: ruby-on-rails sqlite activerecord migration


【解决方案1】:

错误发生在这一行:

@genre = Genre.find(params[:id])

给予

ActiveRecord::RecordNotFound 在 GenresController#show 找不到 ID=故事的类型

这意味着params[:id] 的值“tales”是错误的。我在这里猜测,但我敢打赌,在表格的某个地方或其他地方,有人试图在/genre/tales 而不是/tales/genre/:id 上执行GET(其中:id 应该是一个整数)。我也猜你在routes.rb 中有一个映射,比如:

map.resources :tales, :has_many => :genres

我没有你所关注的书的副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多