我有一个显示Content
的Rails应用。每个内容都属于一个Source
和一个源has_many个内容。每个源均包含一个name
和一个domain
。
内容也属于Edition
。我的应用程序的设置方式是,在创建/编辑Editions
的表单中,我已经使用Cocoon gem嵌套了Contents
的表单字段。
内容的嵌套字段包括一个link
字段。我需要做的是对照Sources表中的各种link
检查domains
并在新创建/编辑的内容上设置相关的source_id
。
我当时想我可以在source_id
或editions controller
动作的update
中设置相关的create
。但是,由于我收到的唯一数据是带有嵌入式contents_attributes
散列的params散列(由于未设置source_id
,因此不包含对source
的引用),如何我可以使用表单上提交的“链接”设置source_id
吗?
这是我在editions_controller上的创建和更新操作:
def create
@edition = Edition.new(edition_params)
respond_to do |format|
if @edition.save
format.html { redirect_to @edition, notice: 'Edition was successfully created.' }
format.json { render :show, status: :created, location: @edition }
else
format.html { render :new }
format.json { render json: @edition.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @edition.update(edition_params)
format.html { redirect_to @edition, notice: 'Edition was successfully updated.' }
format.json { render :show, status: :ok, location: @edition }
else
format.html { render :edit }
format.json { render json: @edition.errors, status: :unprocessable_entity }
end
end
end
这是使用的参数:
def edition_params
params.require(:edition).permit(:date,
:clicks,
:product_id,
contents_attributes: [:id,
:heading,
:body,
:link,
:top_story,
:section_id,
:_destroy
]
)
end
我应该在带有source_id的表单上有一个隐藏的输入吗?还是可以像在控制器上那样完成此操作?
答案 0 :(得分:0)
如果您以内容形式设置了link
值,并且有逻辑根据source
的值来确定link
,那么就不需要设置{{ 1}}或控制器中的形式。
设置source_id
的最佳位置将在模型中,因此无论您如何创建source_id
记录,无论是从版本表单,控制台还是其他控制器,都始终可以进行设置。在这种情况下,您不必担心。
在模型中具有这些关联和回调应该可以解决您的目的:
content