使用devise gem验证应用程序的所有用户.我正在尝试实现Active Storage.
假设所有用户一旦到达应用程序就必须进行身份验证:
class ApplicationController < ActionController::Base
before_action :authenticate_user!
...
end
Run Code Online (Sandbox Code Playgroud)
如何保护Active Storage生成的路由?
无需先进行身份验证即可访问上载文件的URL.未经身份验证的用户可以获取Active Storage生成的文件URL.
我创建了一个全新的rails应用程序,生成一些脚手架和一些模型.经过几次测试后,我意识到t.timestamps生成的列不包含"traditional":null => false选项.我需要这种行为,我看不出这是做什么的.
我重新创建了一个新的应用程序,认为这是一个新的rails 4功能,但我无法获得保存行为.在这个应用程序中,timespamp正常工作.
在我创建帖子的rails控制台中的"窃听应用"中,我们可以看到:
Loading development environment (Rails 4.0.1)
2.0.0-p247 :001 > Post.create(title:"test")
(0.1ms) begin transaction SQL (8.6ms) INSERT INTO "posts" ("created_at", "title", "updated_at") VALUES (?, ?, ?) [["created_at", Wed, 27 Nov 2013 21:19:01 EST -05:00], ["title", "test"], ["updated_at", Wed, 27 Nov 2013 21:19:01 EST -05:00]]
(0.8ms) commit transaction
=> #<Post id: 1, title: "test", content: nil, excerpt: nil, dashboard: nil, created_at: "2013-11-28 02:19:01", updated_at: "2013-11-28 02:19:01">
2.0.0-p247 :002 > Post.last
Post Load (0.4ms) SELECT "posts".* FROM "posts" …Run Code Online (Sandbox Code Playgroud) 我正在和 Phoenix 一起玩,并建立了 has_many 关联。我通常将其on_delete: :delete_all作为参考列的一个选项。但是,如果我改变主意并想稍后更改它nilify_all,那么在迁移内部有没有办法做到这一点?
创建表的迁移:
def change do
create table(:messages) do
add :body, :text
add :sender_id, references(:users, on_delete: :delete_all)
timestamps()
end
create index(:messages, [:sender_id])
end
Run Code Online (Sandbox Code Playgroud)
我正在寻找这样的东西:
def change do
change_options table(:messages), :user_id, on_delete: :nilify_all
end
Run Code Online (Sandbox Code Playgroud)
在一个工作应用程序中,我试图实现非重音查询。
pg-gem version 0.21
postgresql version 9.5/9.6
rails version 4
Run Code Online (Sandbox Code Playgroud)
我首先创建/启用这里的扩展是迁移:
def up
execute 'CREATE EXTENSION IF NOT EXISTS unaccent'
end
def down
execute 'DROP EXTENSION IF EXISTS unaccent'
end
Run Code Online (Sandbox Code Playgroud)
迁移运行良好。psql \dx显示扩展已打开。一个简单的 unccent 查询psql显示它按预期工作。
当我尝试查询这样的东西时:
people = people.where('unaccent(people.first_name) ILIKE unaccent(?)', "%#{params[:first_name]}%") if params[:first_name].present?
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
PG::UndefinedFunction: ERROR: function unaccent(character varying) does not exist
Run Code Online (Sandbox Code Playgroud)
起初我认为连接是错误的数据库,因为我玩了很多版本,但在确保不是这种情况后,错误仍然存在。
完全确定我也在测试服务器上测试它,结果是同样的错误。
由于 db 级别的一切似乎都很好,因此我怀疑在 Rails 方面存在某些问题,但我不知道如何进一步调查。
欢迎任何帮助/建议!
我正在使用教程学习Rails,在Nitrous.io中工作并修改了我的迁移文件以创建模型之间的关系.这是一个简单的时间跟踪应用程序.其中一个已修改的迁移文件的示例如下:
class CreateWorks < ActiveRecord::Migration
def change
create_table :works do |t|
t.integer :project_id
t.integer :user_id
t.datetime :datetimeperformed
t.decimal :hours, precision: 5, scale: 2
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
项目ID,用户ID,datetimeperformed和hours都是新的,但是当我运行rake db:migrate将它们推送到schema.rb时,没有任何反应.它暂停然后给我一个新的提示,但schema.rb文件没有被修改.
我已经得出结论,由于某种原因,迁移不会通过,但不知道为什么.有什么明显的东西我做错了吗?谢谢你的帮助.
我们在同一个域中添加了许多几乎相同的应用程序,每个应用程序都可以通过其特定的子域访问。每个应用程序都有特定的资产(不是很多)。
每个应用程序都引用相同的内容cdn.mydomain.com以从 Cloudfront 获取资产。
资产以间隔命名。举个例子:
应用程序1:
app1.mydomain.com cdn.mydomain.com/assets/app1app1.mydomain.com/assets/app1/*到原点app1.mydomain.com当 Cloudfront 缓存中没有资产时,它会从正确的来源下载资产。
实际上,每次添加新应用程序时,我们都会在同一发行版上创建新的来源和缓存行为。
我们正在尝试简化该过程,以便 Cloudfront 能够从正确的来源获取资产,而无需指定它。如果我们在一个分布中达到原始数量的限制,这将解决问题。
我们怎样才能做到这一点,这可能吗?
我们正在考虑mydomain.com使用缓存配置来转发host标头,但我们不确定这是否会奏效。