我有以下内容(其中 Venue 是 Actor 的 CTI 后代):
class Actor < ActiveRecord::Base
has_one :profile, validate: true, autosave: true
end
class Venue < ActiveRecord::Base
...
%w{description address website phone}.each do |attr|
delegate attr.to_sym, "#{attr}=".to_sym, to: :profile!
end
def profile!
actor.profile || actor.build_profile
end
...
end
我将这些代表属性的字段直接包含在 Venue 表单中。当其中一个属性验证失败时,我看到的只是顶部的通知,而不是字段周围的包装。我想这一定是因为 Venue 实例的错误哈希中的键与属性名称不完全匹配,被设置为:"actor.profile.website"
而不是只是:website
.
有什么办法可以让这些错误正确显示吗?
编辑
这是表格:
<%= simple_form_for @venue do |f| %>
<%= f.error_notification %>
<%= f.input :name %>
<%= f.input :address, required: true %>
<%= f.input :phone %>
<%= f.input :website %>
<%= f.input :members, collection: [], class: "form_tag" %>
<%= f.input :tag_list, as: :string, class: "form_tag", hint: t("misc.hint.tag"),
input_html: { "data-pre" => @venue.tag_list.map {|t| { id: t, name: t }}.to_json } %>
<%= f.input :description, as: :text, input_html: {rows: 6, cols: 53, class: "form_tag"} %>
<div class="actions center">
<%= f.submit class: "btn btn-success" %>