ROR:add_index不工作?

时间:2014-05-11 04:10:48

标签: ruby-on-rails

我是ROR的新手,我想做的是创建两个表格和链接在一起,但我无法正确建立关系,任何人都可以帮忙吗?

我有2个型号,型号"用户"和模型"发布",我想说一个用户has_many发布,由user_id链接

rails generate scaffold user name email ...
rails generate scaffold release title text:description ...

craete_user.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.string :password
      t.string :releaseCount
      t.timestamps
    end
  end
end

create_release.rb

 class CreateReleases < ActiveRecord::Migration
  def change
    create_table :releases do |t|
      t.string :title
      t.text :desc
      t.integer :user_id
      t.timestamps
    end
    add_index :releases, :user_id
  end
end

release.rb

class Release < ActiveRecord::Base
    belongs_to :user
end

user.rb

class User < ActiveRecord::Base
    has_many :release
end

此时,我可以创建用户和发布,但我无法将它们链接在一起。最后,我在控制台中得到了这个结果

  u = User.find(1)
  User Load (0.4ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = ? LIMIT 1  [["id", 1]]
 => #<User id: 1, name: "dave", email: "dave@example.com", password: "dave", releaseCount: "0", created_at: "2014-05-11 03:42:16", updated_at: "2014-05-11 03:42:16"> 
2.1.1 :024 > u.create_release
NoMethodError: undefined method `create_release' for #<User:0x000001029c71d0>
    from /Users/daywong1119/.rvm/gems/ruby-2.1.1/gems/activemodel-4.1.0/lib/active_model/attribute_methods.rb:435:in `method_missing'
    from /Users/daywong1119/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/attribute_methods.rb:206:in `method_missing'
    from (irb):24

3 个答案:

答案 0 :(得分:2)

更新您的用户模型:

class User < ActiveRecord::Base
  has_many :release
end

class User < ActiveRecord::Base
  has_many :releases
end

has_many应该是pural。

答案 1 :(得分:0)

根据以下答案,复数

has_many :resources

您还需要在控制台中添加用户。

u = User.find(1)
r = release.create(title: "title", desc: "some description", user_id: u.id)

或者您可以将用户拖到发布中

u = User.find(1)
r = release.new(title: "title", desc: "some description")
r << u
r.save

&lt;&lt;操作员被称为铲子,请在ruby文档中查看。

在您的视图中,您需要将user_id添加为表单中的隐藏字段。

答案 2 :(得分:0)

您调用的方法不正确。 create_<association_name>仅适用于与单个相关项目的关联,例如belongs_tohas_one

因此,您的关联应定义如下:

class User
  has_many :releases
end

class Release
  belongs_to :user
end

然后你可以写

u = User.find(1)
u.releases.create(...)

或者,你也可以写

r = Release.create(....)
user = r.create_user