我在rails应用程序中使用ActiveAdmin。我的设置如下:
应用程序/模型/ translation_type.rb
class TranslationType < ActiveRecord::Base
has_many :translation_details
accepts_nested_attributes_for :translation_details, allow_destroy: true
end
应用程序/模型/ translation_detail.rb
class TranslationDetail < ActiveRecord::Base
belongs_to :translation_type
attr_accessor :id, :language_from, :language_to, :price
end
应用程序/管理/ translation_type.rb
ActiveAdmin.register TranslationType do
permit_params :translation_type, translation_details_attributes: [:id, :language_from, :language_to, :price, :_destroy]
index do
column :translation_type
column :translation_details
column :created_at
column :updated_at
actions
end
filter :translation_type
filter :created_at
form do |f|
f.inputs "Translation Type Details" do
f.input :translation_type
f.input :created_at
f.input :updated_at
end
f.inputs do
f.has_many :translation_details, allow_destroy: true do |tran_det|
tran_det.input :language_from, :collection => ['Gr', 'En', 'Fr', 'De']
tran_det.input :language_to, :collection => ['Gr', 'En', 'Fr', 'De']
tran_det.input :price
end
end
f.actions
end
controller do
before_filter { @page_title = :translation_type }
end
我不需要translation_detail
的某个部分,所以我省略了app/admin/translation_detail.rb
我希望在translation_detail
表单中嵌套translation_type
形式。使用上面的代码创建嵌套表单但在提交后不会保存translation_detail
的属性。此外,当我尝试更新或删除translation_detail
时,会显示此消息
Couldn't find TranslationDetail with ID=* for TranslationType with ID=*
如何解决这个问题?
答案 0 :(得分:0)
似乎这一行
attr_accessor :id, :language_from, :language_to, :price
app/models/translation_detail.rb
中的导致错误,但我不确定原因。
答案 1 :(得分:0)
我在保存以前未保存且数据库中不存在的字段时遇到了同样的问题。我必须从模型文件中删除 attr_accessor :fieldName
以使其永久化。
正如此 answers 所述:attr_accessor on Rails 仅在您不希望将属性保存到数据库中时才使用,仅作为该模型实例的一部分临时存储。
问题示例中可能发生的情况是它无法保存 TranslationDetail
,因为除了它与 TranslationType
的关系之外的所有内容在保存之前都被丢弃了。