【发布时间】:2011-05-02 10:44:21
【问题描述】:
给定以下两种模型:
class Company < ActiveRecord::Base
has_many :departments
accepts_nested_attributes_for :departments
end
class Department < ActiveRecord::Base
belongs_to :company
end
我现在可以一次性创建公司及其部门:
@company = Company.create! params[:company]
在此示例中,params[:company] 应如下所示:
params[:company] = {
:name => 'Foo Inc',
:departments_attributes => {
1 => { :name => 'Management' },
2 => { :name => 'HR' }
}
}
注意:departments_attributes 键!
但如果我使用 @company.to_xml 转换为 XML,我会得到以下信息:
<company>
<id type="integer">1</id>
<name>Foo Inc</activity>
<departments type="array">
<department>
<id type="integer">1</id>
<company-id type="integer">1</company-id>
<name>Management</name>
</department>
<department>
<id type="integer">2</id>
<company-id type="integer">1</company-id>
<name>HR</name>
</department>
</departments>
</company>
请注意,我在这里将嵌套资源放在名为 <departments> 的容器节点中,而不是 <departments_attributes>!
为什么会出现这种不一致?有没有办法让 Rails 接受使用 departments 而不是 departments_attributes 作为包装器的 POST 请求?
在创建 API 时是否只有我认为这很重要?对于非 Rails 的人来说很奇怪,输出也不能用作输入。
你是如何解决这个问题的 - 如果有的话?
【问题讨论】:
标签: ruby-on-rails xml api rest activerecord