我有一个Rails 5应用,正在尝试从多态关联中为has_one工作。
我有乐队->普通->社交
公共是多态关联
band.rb
class Band < ApplicationRecord
has_one :common, as: :commonable, :dependent => :destroy
belongs_to :genre, optional: true
has_many :events, inverse_of: 'band'
common.rb
class Common < ApplicationRecord
belongs_to :commonable, polymorphic: true
has_one :social, dependent: :destroy, inverse_of: 'common'
accepts_nested_attributes_for :social
social.rb
class Social < ApplicationRecord
belongs_to :common, optional: true
end
band.controller
# GET /bands/1/edit
def edit
@band = Band.find(params[:id])
@commonable = @band
@common = @commonable.common
end
(我正在编辑,所以我要显示该部分)
通用控制器
# GET /commons/1/edit
def edit
common.build_social if @common.social.nil?
end
...
:commentable_type,
:social_id => [],
social_attributes: [:site,
:link,
:active,
:facebook,
:google_places])
常用表格(除社交功能外,表格中的其他所有内容都有效
<div class="field">
<%= form.label :lon %>
<%= form.text_field :lon, id: :common_lon %>
</div>
<hr>
<%= form.fields_for :social do |social| %>
<div class="field">
<%= social.label :facebook %>
<%= social.text_field :facebook , id: :social_facebook %>
</div>
<% end %>
<hr>
<div class="field">
<%= form.label :admin_notes %>
<%= form.text_area :admin_notes, id: :common_admin_notes %>
</div>
如果我在手动创建社交记录的记录上(通过PGAdmin,我看到了社交记录。我遇到的问题是试图为新乐队建立记录,或者我正在编辑社交乐队,记录丢失或未创建
如果我进入控制台并尝试手动进行构建(该表单中的<%console%>,我会得到社交记录的nil ID。这是我正在编辑的乐队/普通乐队的地方,相应的社交记录
>> @band.common.build_social
=> #<Social id: nil, site: nil, active: nil, created_at: nil, updated_at: nil, facebook: nil,