我正在尝试向ActiveAdmin添加自定义过滤器,这些过滤器最近由Ransack提供支持.不幸的是,ransacker根本没有记录,从网上的少数资源我弄乱了以下(在用户模型中):
ransacker :full_text, formatter: ->(search) {
ids = User.search_in_all_translated(search).map(&:id)
ids = ids.any? ? ids : nil
} do |parent|
parent.table[:id]
end
Run Code Online (Sandbox Code Playgroud)
该search_in_all_translated方法返回一个用户数组,该数组与所有已翻译属性中的搜索字符串匹配.
在管理页面上,定义了以下过滤器:
filter :full_text_in,
label: 'full text search',
as: :string
Run Code Online (Sandbox Code Playgroud)
过滤器本身有效,因此过滤tom将列出所有匹配的记录.但是,滤波器输入中的值切换为["tom"].
在应用过滤器之前:

应用过滤器后:

任何想法如何解决这一问题?
给定模型Albumhas_many Song,后者使用本地化字段,例如:
Song#name_en
Song#description_en
Song#name_fr
Song#description_fr
[...]
Run Code Online (Sandbox Code Playgroud)
由于前端设计,我无法f.simple_fields_for :songs在一个地方为所有歌曲属性做一个,但需要拆分它:
= f.simple_fields_for :songs do
= render partial: 'song_en_fields', locals: { f: f, locale: :en }
[...]
= f.simple_fields_for :songs do
= render partial: 'song_fields', locals: { f: f, locale: :fr }
[...]
Run Code Online (Sandbox Code Playgroud)
得到的字段建立索引用[0],[1]等他们应该,但是,指数不为0的每个indvidivual重新启动simple_fields_for,但只是保持计数.
我检查了源代码并index在Rails中找到了一个选项fields_for,但这只是添加了一个额外的索引数组.
有没有办法在同一集合多次调用simple_fields_for(或fields_for)时"重置"索引的自动增量?
假设您正在使用不同的arity覆盖子类中的方法:
class A
def foo(arg) # arity is 1
# doing something here
end
end
class B < A
def foo(arg1, arg2) # arity is 2
super(arg1) # <- HERE
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法super在这里获得在线的arity ?
(真实的用例:我正在调用super知道超类不带任何参数.但是,如果超类实现(在gem中)发生变化,我想发出警告.)
谢谢你的帮助!
我偶尔会使用PG::TRDeadlockDetectedRails with PostgreSQL 应用程序(通过 Passenger/Nginx 提供服务)并跟踪它到代码中使用ActiveRecord::Base.connection.exececute.
为了解决这个问题,我将替换.execute为.exec_query或.exec_update按照文档的建议。ActiveRecord::Base.connection.exec_query但是,是否从连接池获取连接并没有真正明确。
ActiveRecord::Base.connection.exec_query,是否必须用 包裹起来ActiveRecord::Base.connection_pool.with_connection?(我的猜测:是的)ActiveRecord::Base.connection.exec_query请求上下文之外使用时(例如作为 cronjob 执行的 Rake 任务),是否必须用 包裹起来ActiveRecord::Base.connection_pool.with_connection?(我的猜测:是的)如果需要包装,是否有比以下更短的替代方案:
ActiveRecord::Base.connection_pool.with_connection do |connection|
connection.exec_update "REINDEX INDEX my_complex_index"
end
Run Code Online (Sandbox Code Playgroud)
(我的猜测:没有)
感谢您的提示!
我已经根据官方文档实现了客户端地理编码:
https://developers.google.com/maps/documentation/geocoding/
一切正常,但是,有一个缺点:结果总是使用一种语言,即使用language参数请求的语言。
我需要的是翻译成多种语言的地点,即我们网站可用的语言。这是一个例子:搜索“Geneva”会根据language参数产生一个结果地点:
en: 日内瓦de: 根夫fr: 日内瓦有没有办法只用一个 API 调用就获得所有三个翻译,还是我必须单独获取翻译?
谢谢你的提示!
这篇博文展示了如何immutable_concat在 Pg 中创建函数的示例:
CREATE OR REPLACE FUNCTION immutable_concat(VARIADIC "any")
RETURNS text AS 'text_concat'
LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)
我想做同样的事情concat_ws并且相应的text_concat_ws确实存在,但是,以下只会使过程崩溃:
CREATE OR REPLACE FUNCTION immutable_concat_ws(VARIADIC "any")
RETURNS text AS 'text_concat_ws'
LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)
更新: 的 siguatureimmutable_concat_ws应该是(glue, *parts),一个胶水(text 或 varchar)和一个或多个部分(text、varchar 或 null)。
我在这里缺少什么?
我想将exception_notification gem添加到我们的应用程序中,但是,当我尝试手动触发邮件时会发生这种情况:
exception
# => #<ZeroDivisionError: divided by 0>
ExceptionNotifier::Notifier.exception_notification(request.env, exception)
# => #<ActionMailer::Base::NullMail:0x007fa81bc7c610>
ExceptionNotifier::Notifier.background_exception_notification(exception)
# => #<ActionMailer::Base::NullMail:0x007fa81bf58190>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,在某个控制器中rescue_from Exception故意调用之后,控制台位于ApplicationController 内部的断点处1/0.
我也在使用delayed_job,但是 - 毫不奇怪 - ExceptionNotifier::Notifier.background_exception_notification(exception).deliver不会假装什么.
我已经设置config.consider_all_requests_local = false了开发,但仍然exception_notification实例化NullMail.在应用程序的其他部分,邮件工作正常并使用sendmail.
我在这里做错了什么想法?谢谢你的帮助!
ruby-on-rails ruby-on-rails-3 exception-notification exception-notifier
我在 Rails 3.2rc1 应用程序中拥有一些资源,以下是其中的一些:
app/
assets/
stylesheets/
application.css.scss
users.css.scss
projects.css.scss
(...)
parts/
fonts.scss
(...)
Run Code Online (Sandbox Code Playgroud)
这application.css.scss只是一个清单,其中包含以下行:
@import 'parts/fonts';
Run Code Online (Sandbox Code Playgroud)
并views/layouts/application.html.slim加载预编译的样式表:
= stylesheet_link_tag "application", media: "all"
= stylesheet_link_tag params[:controller], media: "all"
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好,对于开发来说效果很好。在生产部署期间,rake assets:precompile被调用并且它对于应用程序样式表运行良好。但是每个控制器的样式表被跳过,因此应用程序崩溃了。
为了解决这个问题,我将其添加到config/environments/production.yml:
config.assets.precompile += %w(*.css *.js)
Run Code Online (Sandbox Code Playgroud)
现在已经编译了每个控制器的样式表,但该应用程序仍然会出现以下问题:
ActionView::Template::Error (application.css isn't precompiled):
5: = stylesheet_link_tag "application", media: "all"
app/views/layouts/application.html.slim:5:in `_app_views_layouts_application_html_slim__4032169744877009540_23192340'
Run Code Online (Sandbox Code Playgroud)
但是当我查看时public/assets/,预编译的application-3218a93530ecb65582d5b345133dab49.css和压缩的双胞胎就在那里。
如果我将通配符替换为config/environments/production.yml所有每个控制器样式表的列表(换句话说:除了 之外的所有样式表application.css),一切都会像魅力一样工作:
config.assets.precompile += %w(users.css projects.css)
Run Code Online (Sandbox Code Playgroud)
应用程序样式表是否被处理了两次,从而导致预编译无法像宣传的那样工作?
我正在运行一个启用了“userns-remap”的dockerized GitLab 实例,并且我想在主机上使用共享的 PostgreSQL。然而,当我 docker-compose up 时创建的桥在每次运行时都会获得一个新的随机名称“br-xxxxxxxxxxxx”。
这通常不会成为问题,但主机上的 Vuurmuur 防火墙默认会阻止从容器到主机的所有流量,并且我需要网桥名称才能在 Vuurmuur 上设置允许规则。
我发现了一些相关的主题,例如com.docker.network.bridge.name,但我很难将它们放在一起。到目前为止,我试图找到一种方法来确保每次容器升级时,网桥都会分配相同的名称和相同的 IP/掩码。这是否可能,docker-compose.yml或者这种方法是完全错误的吗?
docker-compose.yml到目前为止,这是不引人注目的:
version: '3.8'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_host'] = '172.18.0.1'
(...)
ports:
- '8080:80'
volumes:
(...)
Run Code Online (Sandbox Code Playgroud)
感谢您的任何提示!
ruby ×3
postgresql ×2
activeadmin ×1
activerecord ×1
bridge ×1
concat ×1
concat-ws ×1
docker ×1
fields-for ×1
function ×1
google-maps ×1
ransack ×1
simple-form ×1