0

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

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

编辑:只要提到我需要分享的额外(系统/配置/等)信息,以便从某人(即使不是你)那里得到这个问题的一个很好的答案,将不胜感激。(1-ups 以获得关于堆栈溢出优化策略的好技巧)

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

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。如您所见,主题是页面的父级。这是两个模型。

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

主题.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

页面.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%。

4

1 回答 1

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
于 2012-05-18T06:16:44.660 回答