我对在Thread.current哈希中存储信息的实践(例如,current_user,当前子域等)持续存在冲突的看法.已经提出该技术作为简化模型层内的后续处理的方法(查询范围,审计等).
许多人认为这种做法是不可接受的,因为它破坏了MVC模式.其他人对该方法的可靠性/安全性表示担忧,而我的两部分问题则侧重于后一方面.
Thread.current在整个周期中,散列是否保证可用且对一个且仅一个响应是私有的?
据我所知,在响应结束时,一个线程可能会被移交给其他传入的请求,从而泄漏存储在其中的任何信息Thread.current.在响应结束之前清除此类信息(例如,通过Thread.current[:user] = nil从控制器执行after_filter)是否足以防止此类安全漏洞?
谢谢!朱塞佩
我有2个Rails模型:Book和Category,其中一本书belongs_to是一个类别,一个类别has_many书籍.
类别名称显示在每本书的页面中,并且页面被缓存.
如果我更改了类别名称(例如,从"科幻"到"科幻小说"),那么所有相应的书页都将过时,并且需要"触摸"书籍才能触发HTML重新生成.
能够这样做似乎是有意义的:
class Category << ActiveRecord::Base
has_many :books, touch: true
end
Run Code Online (Sandbox Code Playgroud)
但是该选项不可用,我想因为该touch机制会实例化每个对象,这可能会导致has_many关系的重大性能损失.
为了避免这种情况,我使用原始SQL如下:
class Category << ActiveRecord::Base
has_many :books
after_update -> {
ActiveRecord::Base.connection.execute "UPDATE books SET updated_at='#{current_time_string}' WHERE category_id=#{id})"
}
end
Run Code Online (Sandbox Code Playgroud)
这太可怕了.有没有更好的办法?
ActiveAdmin中的默认显示页面是一个每行包含一个属性的表.对于我的后端,这没关系,除了我想要隐藏id,created_at,updated_at等字段.
是否有可能以类似于索引页面的方式执行此操作,即通过显式列出所需的属性,同时让AtiveAdmin处理布局?
文档中显示的唯一示例表明,要自定义显示页面,您必须完全接管并编写部分或arbre构造.
谢谢!
我试图从数据库中的每个帖子中获取评论的数量.但是,以下内容:
Post.includes(:comments).group("posts.id").count("comments.id")
Run Code Online (Sandbox Code Playgroud)
引发mysql错误"Unknown column comments.id",因为生成的sql似乎完全忽略了includes():
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` GROUP BY posts.id
Run Code Online (Sandbox Code Playgroud)
有趣的是,用join()替换includes()将产生有效的sql:
Post.joins(:comments).group("posts.id").count("comments.id")
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` INNER JOIN `comments` ON `comments`.`post_id` = `posts`.`id`
GROUP BY posts.id
Run Code Online (Sandbox Code Playgroud)
但上面的查询排除了所有0条评论的帖子,这不是我想要的.我需要的是生成以下SQL(但没有编写SQL,他是他)
SELECT COUNT(comments.id) AS count_comments_id, posts.id AS posts_id
FROM `posts` LEFT OUTER JOIN `comments` ON `comments`.`post_id` = `posts`.`id`
GROUP BY posts.id
Run Code Online (Sandbox Code Playgroud) 如果一个项目:
我正在使用simple_form(简化):
simple_form_for @project do |f|
f.input :project_name
f.simple_fields_for :tasks do |j|
j.input :task_name
end
f.submit
end
Run Code Online (Sandbox Code Playgroud)
我如何将标签国际化:task_name?我在我的simple_form.it.yml文件中尝试了很多组合,例如:
it:
simple_form:
labels:
project:
project_name: 'Nome progetto'
task:
task_name: 'Nome compito'
Run Code Online (Sandbox Code Playgroud)
无法在文档中找到示例.谷歌指出了几个明显相关的封闭问题:
https://github.com/plataformatec/simple_form/issues/48
https://github.com/plataformatec/simple_form/issues/194
但到目前为止,我感到茫然......
谢谢!朱塞佩
internationalization nested-attributes ruby-on-rails-3 simple-form
在过去的几周里,我的 Rails 6.1 应用程序引发了数百个异常,如下所示:
An ActionDispatch::Http::Parameters::ParseError occurred in regdevs#create:
859: unexpected token at
'utf8=%E2%9C%93&authenticity_token=fnrg63qtelQvkQx9NQx8SaZIp7mR500toEiWdaJe91
%2FOzsEvRbGD4Ow6NNADCtjw7H3EkDvFZVGP4gQkGZceEw%3D%3D&user%5Bemail%5D=jrmills91
%40hotmail.com&user%5Bfirst_name%5D=wJAhzNnPWbqMdfH&user%5Blast_name%5D=tKdp
IVXJlneZbiuA&user%5Bnickname%5D=lBdbyYgiaHt&user%5Bpassword%5D=0SgLpVuf5Wqs
%21&user%5Bpassword_confirmation%5D=0SgLpVuf5Wqs%21&user%5Bterms_of_service
%5D=1&commit=Complete+registration&g-recaptcha-response=dzghTWcBpmI'
Run Code Online (Sandbox Code Playgroud)
当“某人”尝试使用虚假凭据注册新帐户(通过 Devise)时,就会出现此错误。这显然看起来像是某种攻击。
我有两个问题:
859 unexpected token错误的更多信息?在Twitter Bootstrap 3中,给出了这个glyphicon span:
<span class="glyphicon glyphicon-home"> Home</span>
Run Code Online (Sandbox Code Playgroud)
'Home'一词用标准sans serif而不是父标签的字体呈现.
如何为跨度内的文本指定任意字体系列,并仍然正确呈现图标?
当然我可以将文本移到跨度范围之外,但是那样 就不会被尊重了,不是吗?无论如何,从语义角度来看,将图标所描述的文本保持在跨度内似乎是合理的.
这是一个例子:

这就是Chrome呈现以下内容的方式:
<h1>
<span class="glyphicon glyphicon-check"></span> Scoring
<span class="glyphicon glyphicon-home"> Home</span>
</h1>
Run Code Online (Sandbox Code Playgroud)
第一个跨度是我希望它看起来如何,但在语义错误(IMOHO),而第二个看起来是错误的.
我似乎无法找到有关如何修改管理gem的默认仪表板的任何文档,以便自定义索引和显示页面中显示的内容.这是我的具体目标:
Article belongs_to一个Author现在,相反,我得到了一个不那么有用的"作者#4"作为唱片公司.这是自动生成的仪表板:
class ArticleDashboard < Administrate::BaseDashboard
ATTRIBUTE_TYPES = {
author: Field::BelongsTo,
id: Field::Number,
title: Field::String,
content: Field::Text,
created_at: Field::DateTime,
updated_at: Field::DateTime,
}.freeze
[snip]
end
Run Code Online (Sandbox Code Playgroud)
" 自定义仪表板 "文档页面显示:
每个Field类型都使用一组不同的选项,这些选项通过
.with_options类方法指定.
所以我想,在调用with_options上Field::BelongsTo可能是要走的路,但哪些选项可用于该字段(或任何其他为此事)?
虽然问题的标题与以前的标题非常相似,但我的问题似乎有所不同.
简而言之,js清单中的第一项包含两次.
这是我/app/assets/javascript/application.js在Rails 3.1应用程序中的整个文件:
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
//= require utilities
Run Code Online (Sandbox Code Playgroud)
这是渲染页面源代码的片段:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
请注意,如果我向上移动任何其他行的顶部,application.js如下所示:
//= require utilities
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
Run Code Online (Sandbox Code Playgroud)
它总是第一个被包含两次的项目!
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script …Run Code Online (Sandbox Code Playgroud) activerecord ×2
activeadmin ×1
bots ×1
css ×1
devise ×1
fonts ×1
javascript ×1
mysql ×1
rubygems ×1
simple-form ×1
thoughtbot ×1