在我的Rails 4应用程序中,我有以下模型:
class Post < ActiveRecord::Base
has_one :metadatum
end
class Metadatum < ActiveRecord::Base
belongs_to :post
end
以下是Metadatum模型的架构:
create_table "metadata", force: :cascade do |t|
t.integer "post_id"
t.string "title"
t.text "description"
t.string "host"
t.string "image"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "link"
end
在create
操作中,我执行以下操作以获取MetaInspector gem的数据,并将其存储在与Metadatum
条右侧相关联的Post
中:
def create
[...]
if @post.format == "Link"
@metadatum = @post.build_metadatum
@link = MetaInspector.new(facebook_copy_link(@post.copy)) unless facebook_copy_link(@post.copy).blank?
if @link
@metadatum.title = @link.title
@metadatum.description = @link.meta_tags["name"]["description"].to_s.tr('[""]', '')
@metadatum.host = @link.host
@metadatum.image = @link.images.best
@metadatum.save
end
end
respond_to do |format|
if @post.save
[...]
end
end
end
现在,我需要在编辑操作中实现类似的过程,考虑到我们有两种情况:
:format
未设置为&#34;链接&#34;在此edit
之前,现在设置为&#34;链接&#34;,因此与Metadatum
关联的Post
记录为空。Post
格式已设置为&#34;链接&#34;在此edit
之前,我们只需要update
与Metadatum
相关联的Post
记录的属性。基于这种推理,我在Posts#Update
中实现了以下内容:
def update
[...]
if @post.format == "Link"
if @post.metadatum
@metadatum = @post.metadatum
else
@metadatum = @post.build_metadatum
end
@link = MetaInspector.new(facebook_copy_link(@post.copy)) unless facebook_copy_link(@post.copy).blank?
if @link
@metadatum.update!(title: @link.title,
description: @link.meta_tags["name"]["description"].to_s.tr('[""]', ''),
host: @link.host,
image: @link.images.best)
end
end
respond_to do |format|
if @post.update(post_params)
[...]
end
end
end
end
这只是部分有效,我无法理解原因:
知道这里有什么问题以及如何解决它?