小编seq*_*elo的帖子

如何正确重写ActiveRecord的where方法?

我已经成功地覆盖了该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)

ruby activerecord ruby-on-rails

6
推荐指数
0
解决办法
441
查看次数

ActiveAdmin:如何将Panel添加到Form块中?

我重新使用了附件的面板,它显示在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)

ruby forms ruby-on-rails activeadmin

4
推荐指数
1
解决办法
3031
查看次数

标签 统计

ruby ×2

ruby-on-rails ×2

activeadmin ×1

activerecord ×1

forms ×1