【问题标题】:Rails has_many : Why does create_model not work?Rails has_many:为什么 create_model 不起作用?
【发布时间】:2012-11-15 02:22:48
【问题描述】:

我想我在这里遗漏了一些简单的东西......但无法弄清楚。

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me
  has_many :events
end

class Event < ActiveRecord::Base
  attr_accessible :start, :end, :all_day, :url
  belongs_to :user
end

u1 = User.create name: "Bob", email: "bob@what.com", password: "asdfasdf"
u1.create_event(start: 3.days.from_now)

-->

undefined method `create_event' for #<User:0x007f918cbbf7b8>

然而,

u1.events << Event.create!(start: 3.days.from_now)

有效!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 associations has-many


    【解决方案1】:

    你已经定义了has_many关联:

    has_many :events
    

    所以,如果你想创建对象,你可以使用这些方法:

    # create new object, but not insert to database
    u1.events.build(...)
    
    # create new object and auto call `save` method to insert to database
    u1.events.create(...)
    

    您使用u1.create_event,这将在您定义has_one 关联时更正:

    has_one :event
    

    所以,你将有这些方法来创建对象:

    # create new object, but not insert to database
    u1.build_event(...)
    
    # create new object and auto call `save` method to insert to database
    u1.create_event(...)
    

    【讨论】:

    • 感谢您的回答 - 现场。别人打你一拳虽然:)
    • 我只是想和你说清楚,但他先回答了,所以你要接受他的回答:)
    【解决方案2】:

    看不到在用户上定义的 create_event。你也可以使用

    u1.events.build(:start => 3.days.from_now)
    u1.save
    

    很高兴看到这个

    u1.events << Event.create!(start: 3.days.from_now)
    

    有效。虽然,我确实认为它有点迟钝,对于代码的普通读者来说可能不会立即清楚。

    【讨论】:

    • 对于has_many关联,你想要的方法是u1.events.create(...)
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多