我已经成功地覆盖了该where方法。我想要实现的行为是,如果hstore访问 my ,它会where以这样的方式重写查询,即这些hstore项目被视为单独的列。这是我的where方法:
def where(opts = :chain, *rest)
if opts == :chain
WhereChain.new(spawn)
elsif opts.blank?
return self
elsif opts.is_a?(Hash)
translated_attributes(opts).each do |attribute|
return spawn.where!("'#{opts[attribute]}' = any(avals(#{attribute}))", rest)
end
else
super(opts, rest)
end
end
Run Code Online (Sandbox Code Playgroud)
为此,我写了这个minitest,效果很好!
def test_where_query_with_translated_value
PageWithFallbacks.create!(:title_raw => {'en' => 'English title', 'de' => 'Deutscher Titel'})
exp = PageWithFallbacks.create!(:title_raw => {'en' => 'Another English title', 'de' => 'Noch ein Deutscher Titel'})
res = PageWithFallbacks.where(title: 'Another English title').first
assert_equal(exp.id, …Run Code Online (Sandbox Code Playgroud) 我重新使用了附件的面板,它显示在show块上.
form对于编辑,我也想在块上显示.
那可能吗?
我尝试过这样的事情:
form do |f|
#! attachments_panel:
panel "Attachments" do
ul do
# (..) li components
end
#! Editing form
f.inputs 'Details' do
f.input :name
# (..) other inputs
end
end
Run Code Online (Sandbox Code Playgroud)
但它只是显示小组,表格不包括在内.改变另一个也只显示面板.
编辑:根据@ CMaresh的解决方案,我创建了一个初始化器,用于monkeypat the ActiveAdmin gem.
#! config/initializers/active_admin_patches.rb
ActiveAdmin::FormBuilder.class_eval do
def append_panel(&block)
self.form_buffers.last << Arbre::Context.new({}, self.template, &block)
end
end
Run Code Online (Sandbox Code Playgroud)
这样,它允许使用原始示例代码,如下所示:
form do |f|
#! attachments_panel:
f.append_panel do # <----
panel "Attachments" do
ul do
# (..) li components
end
end
#! Editing form
f.inputs …Run Code Online (Sandbox Code Playgroud)