Rails + model.rb问题 - rails console错误消息 - “对象不支持#inspect”

时间:2012-05-18 05:14:07

标签: ruby-on-rails model-view-controller object model rails-models

EDIT3: 也就是说,不要将迁移代码放在model.rb文件中!!!

EDIT2:问题(?): 任何迁移代码都属于model.rb文件吗?

编辑:只需提及我需要分享的额外(系统/配置/等)信息,以便从某人(即使不是你)得到这个问题的良好答案,将不胜感激。 (1-up有关堆栈溢出优化策略的好建议)

首先,这是命令提示符活动:

C:\Users\davo\Desktop\RailsProjects\simple_cms>rails c
Loading development environment (Rails 3.2.3)
irb(main):001:0> subject = Subject.find(1)
←[1m←[36mSubject Load (1.0ms)←[0m  ←[1mSELECT `subjects`.* FROM `subjects` WHERE       `subjects`.`id` = 1
LIMIT 1←[0m
=> #<Subject id: 1, name: "Initial Subject", position: 1, visible: true, created_at:"2012-05-18 01:00:26", updated_at: "2012-05-18 01:11:21">
irb(main):002:0> subject.pages
(Object doesn't support #inspect)

基本架构是我们在这里有两个模型,page.rb和subject.rb。正如您将看到的,Subject是Page的父级。这是两个模型。

查看此代码的指南:我认为这两个模型中与此问题相关的所有内容都是has_many和belongs_to标记。我承认,我觉得这里应该有一些外键。这里有外键吗?或者这也错了?

subject.rb中

class Subject < ActiveRecord::Base
  # attr_accessible :title, :body
  has_many :pages

  scope :visible, where(:visible => true)
  scope :invisible, where(:visible => false)
  scope :search, lambda {|query| where(["name LIKE ?", "%#{query}%"])}
end

page.rb

class Page < ActiveRecord::Base
  has_many :sections
  belongs_to :subject
  # attr_accessible :title, :body
  create_table "Pages" do |t|
  t.string "name"
  t.string "permalink"
  t.integer "position"
  t.boolean "visible?"

  end
end

我真的很陌生,所以如果我没有给你一些你需要的信息,请原谅我。请让我们知道您需要哪些额外信息,我不确定错误来自哪里,但我知道这是一个模型(M .... VC)问题。那个95%。

1 个答案:

答案 0 :(得分:3)

您的模型中有迁移。

create_table "Pages" do |t|
  t.string "name"
  t.string "permalink"
  t.integer "position"
  t.boolean "visible?"
end

应该在./db/migrate/{timestamp}_create_pages.rb中。如果您执行rails g model page

,则会为您生成此文件

您还需要subject_id列来存储与主题的关系

class CreatePages < ActiveRecord::Migration
  def change
    create_table :pages do |t|
      t.integer :subject_id
      t.string :name
      t.string :permalink
      t.integer :position
      t.boolean :visible?

      t.timestamps
    end
  end
end