【问题标题】:Rails 3.1 - Binding HABTM from other controllerRails 3.1 - 从其他控制器绑定 HABTM
【发布时间】:2011-12-06 20:35:50
【问题描述】:

我有:

class Person < ActiveRecord::Base
  has_many :people_phones
  has_many :phones, :through => :people_phones
end

我也有:

class Request < ActiveRecord::Base
  belongs_to :person
  belongs_to :phone
end

现在当有人打电话提出请求时,我打开“requests#new”表单,填写 person_id 和 phone_number 以及其他详细信息,然后将它们提交给“requests#create”controller#action。

在“requests#create”中,我可以这样做:

@phone = Phone.find_or_create_by_phone_number(params[:phone][:phone_number])

但是我怎样才能通过这个 Requests 控制器将 Person 与那个电话绑定呢?

我的意思是在 people_phones 表中创建一条记录(如果它不存在)?

【问题讨论】:

    标签: ruby-on-rails-3.1 has-and-belongs-to-many has-many-through


    【解决方案1】:
    User.find(person_id).phones << @phone
    

    我真的不知道你的应用程序是如何工作的,但你明白这个想法。 如果您有请求,并且想要“验证”它,您会这样做

    request.person.phones << request.phone
    

    有趣的东西知道,它有点相关(我会试着找到我在哪里找到的,那是很久以前的事了)

    将对象保存到数据库所需的步骤:

    新的

    Blog.new(…).save
    user.blogs << Blog.new(…)
    user.blogs.new(…).save – do not use, no practical use case
    

    构建

    Blog.build – not possible
    user.blogs.build(…), user.save – both are required to save to DB
    

    创建

    Blog.create(…)
    user.blogs.create(…)
    

    【讨论】:

    • 非常感谢。我从来没有见过这个“
    • &lt;&lt; 在 ruby​​ 中用于向数组添加元素。这里的原理相同,只是它将对象保存到数据库中。我会用一些细节编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多