我是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
答案 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_to
或has_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