我将一个应用程序升级到 Rails 6.1.0(从 6.0.3.3 开始,通过创建一个新的仅 api 应用程序,添加 RSpec,然后手动复制所需的文件)。
当我运行 RSpec 时,我看到以下警告:
DEPRECATION WARNING: connection_config is deprecated and will be removed from Rails 6.2 (Use
connection_db_config instead) (called from <top (required)> at
[...app/models/application_record.rb:1].
Run Code Online (Sandbox Code Playgroud)
我没有更改ApplicationRecord默认的类:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Run Code Online (Sandbox Code Playgroud)
我仅在运行 RSpec 时看到此警告。我没有在 Rails 控制台或 Rails 服务器日志中看到它。
这是我的config/database.yml:
default: &default
adapter: postgresql
encoding: unicode
host: <%= ENV.fetch('DATABASE_HOST', 'localhost') %>
username: <%= ENV.fetch('POSTGRES_USER', 'postgres') %>
password: <%= ENV.fetch('POSTGRES_PASSWORD', '') %>
database: <%= ENV.fetch('POSTGRES_DB', 'myapp_development') %>
pool: …Run Code Online (Sandbox Code Playgroud) rspec ruby-on-rails rspec-rails rails-activerecord money-rails
我想总结订单金额.
但如果order.upgrade != nil我立即结束这个块.
但我得到了nil价值.
那不是我的期望.
如何实现我的目标?
谢谢
points = orders.inject(0) do |sum, order |
break if order.upgrade != nil
sum += order.actual_amount if order.actual_amount
end
Run Code Online (Sandbox Code Playgroud) 我正在使用js日历将字符串插入文本字段以提交为日期时间值.不确定它是否重要但我现在正在使用SQLite.
我将格式设置如下(在初始化程序中):
Time::DATE_FORMATS[:default] = '%m/%d/%Y %H:%M'
Time::DATE_FORMATS[:db] = '%m/%d/%Y %H:%M'
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Rails显然使用不同的格式验证日期.
例如,如果我按如下方式设置它:
myobject.my_datetime = '06/30/2012 00:00'
Run Code Online (Sandbox Code Playgroud)
它最终为null(ActiveRecord生成的SQL查询本身将其设置为NULL).如果我将它设置为小于或等于12的日期,则日期部分结束正确(但生成的SQL查询仍显示月份前一天的字符串,即在上面的示例中,SQL查询的字符串为'30/06/2012 05:00:000000').
正如你所看到的那样,即使我将config.time_zone设置为东部时间,它似乎也为UTC(?)增加了5个小时.
行为是从控制台或通过表单提交相同.
关于我缺少什么的任何建议?
更新:
当我遵循jdoe的建议并执行此操作时:
myobject.my_datetime = Time.strptime('06/30/2012 08:00','%m /%d /%Y%H:%M')
生成的查询现在看起来正确(忽略4小时的差异):
UPDATE "myjoin_table" SET "my_datetime" = '06/30/2012 04:00.000000' .....
Run Code Online (Sandbox Code Playgroud)
它以这种方式在数据库中结束.
但是当我重新加载对象时,AR对象中的值被初始化为nil.
我想我只是在我的控制器动作中逐个解析字符串并手动将参数设置为update_attributes.这比应该的更难.
我正在使用ActiveAdmin的Rails 4分支。
我有一个通过以下方式从菜单中排除的位置模型:
ActiveAdmin.register Location do
belongs_to :area
menu false
end
Run Code Online (Sandbox Code Playgroud)
菜单中未排除Area模型。
当我尝试通过以下方式在测试中创建新位置时:
post :create, location: { "name" => "Sorry"}, area_id: a.id
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
ActiveAdmin::MenuCollection::NoMenuError: No menu by the name of :area in availble (sic)
menus: default, utility_navigation, season
Run Code Online (Sandbox Code Playgroud)
当我将位置添加回菜单时(即注释掉“ menu false”),问题就消失了。我在Rails 4之前没有这个问题。
显然,我宁愿能够继续使用从菜单中而不是从CSS中排除的方法。
有什么建议么?
假设我有两个表,一个有博客帖子,另一个有读者和他们的评论:
表格1:
表名:BlogPosts:
结构体:
id (int)
title (string)
Run Code Online (Sandbox Code Playgroud)
表2:
表名:读者:
id (int)
blog_post_id (int)
name (string)
comment (string)
Run Code Online (Sandbox Code Playgroud)
在Readers表中,blog_post_id/name上有一个唯一的复合键(即每个帖子每个读者一个评论),但这对我的问题可能无关紧要.
我希望能够做一个查询告诉我每个BlogPost的特定读者评论是什么,但它应该包括没有为该读者输入评论的BlogPosts(因此查询应该为每个博客帖子返回一行)数据库).
我尝试了几个看起来像这样的变体:
SELECT
BlogPosts.id,
BlogPosts.title,
Readers.name,
Readers.comment
FROM
BlogPosts
RIGHT JOIN Readers ON
(BlogPosts.id = Readers.blog_post_id)
WHERE Readers.name = "joe"
Run Code Online (Sandbox Code Playgroud)
..这只返回实际上有来自乔的评论的行.每当我包含where子句时,我能够获得所有博客帖子的其他变体给了我一个无效的标识符.
我正在使用Oracle Express 10g以防万一.
谢谢你的帮助.
表格1
id(int) | name(varchar)
1 | at,bat
2 | cat,at,bat,mat
3 | mat,cat
4 | sat,bat
Run Code Online (Sandbox Code Playgroud)
表2
id(int) | type(varchar)
1 | at
2 | mat
Run Code Online (Sandbox Code Playgroud)
如您所见,table1包含csv字符串.现在我需要获取id从s Table 1,其name小号存在的Table2类型字段.
有没有任何纯mysql查询方式这样做?如果没有,在大型记录集的情况下,最有效的方法是什么?
activeadmin ×1
activerecord ×1
datetime ×1
join ×1
money-rails ×1
mysql ×1
oracle ×1
rspec ×1
rspec-rails ×1
ruby ×1
sql ×1
syntax ×1