小编Giu*_*ppe的帖子

在rails中使用Thread.current []的安全性

我对在Thread.current哈希中存储信息的实践(例如,current_user,当前子域等)持续存在冲突的看法.已经提出该技术作为简化模型层内的后续处理的方法(查询范围,审计等).

许多人认为这种做法是不可接受的,因为它破坏了MVC模式.其他人对该方法的可靠性/安全性表示担忧,而我的两部分问题则侧重于后一方面.

  1. Thread.current在整个周期中,散列是否保证可用且对一个且仅一个响应是私有的?

  2. 据我所知,在响应结束时,一个线程可能会被移交给其他传入的请求,从而泄漏存储在其中的任何信息Thread.current.在响应结束之前清除此类信息(例如,通过Thread.current[:user] = nil从控制器执行after_filter)是否足以防止此类安全漏洞?

谢谢!朱塞佩

ruby-on-rails thread-safety

78
推荐指数
4
解决办法
2万
查看次数

Rails has_many关系中缺少触摸选项

我有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)

这太可怕了.有没有更好的办法?

activerecord ruby-on-rails

12
推荐指数
2
解决办法
4200
查看次数

在ActiveAdmin中自定义显示页面

ActiveAdmin中的默认显示页面是一个每行包含一个属性的表.对于我的后端,这没关系,除了我想要隐藏id,created_at,updated_at等字段.

是否有可能以类似于索引页面的方式执行此操作,即通过显式列出所需的属性,同时让AtiveAdmin处理布局?

文档中显示的唯一示例表明,要自定义显示页面,您必须完全接管并编写部分或arbre构造.

谢谢!

ruby-on-rails ruby-on-rails-3 activeadmin

10
推荐指数
1
解决办法
1万
查看次数

计算Rails中的相关记录

我试图从数据库中的每个帖子中获取评论的数量.但是,以下内容:

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)

mysql activerecord ruby-on-rails

10
推荐指数
2
解决办法
9201
查看次数

i18n使用simple_form标记嵌套模型

如果一个项目:

  • has_many:任务
  • accepts_nested_attributes_for:任务

我正在使用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

8
推荐指数
1
解决办法
6064
查看次数

Rails 6 应用程序中重复出现“859:意外令牌”异常

在过去的几周里,我的 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)时,就会出现此错误。这显然看起来像是某种攻击。

我有两个问题:

  1. 我如何才能找到有关此特定859 unexpected token错误的更多信息?
  2. 我应该担心吗?验证码守卫似乎可以有效阻止帐户创建,但我想知道我是否遗漏了一些东西

bots ruby-on-rails devise

6
推荐指数
1
解决办法
1230
查看次数

Bootstrap 3:glyphicon范围内的字体系列

在Twitter Bootstrap 3中,给出了这个glyphicon span:

<span class="glyphicon glyphicon-home">&nbsp;Home</span>
Run Code Online (Sandbox Code Playgroud)

'Home'一词用标准sans serif而不是父标签的字体呈现.

如何为跨度内的文本指定任意字体系列,并仍然正确呈现图标?

当然我可以将文本移到跨度范围之外,但是那样&nbsp;就不会被尊重了,不是吗?无论如何,从语义角度来看,将图标所描述的文本保持在跨度内似乎是合理的.

这是一个例子:

在此输入图像描述

这就是Chrome呈现以下内容的方式:

<h1>
<span class="glyphicon glyphicon-check"></span>&nbsp;Scoring
<span class="glyphicon glyphicon-home"> Home</span>
</h1>
Run Code Online (Sandbox Code Playgroud)

第一个跨度是我希望它看起来如何,但在语义错误(IMOHO),而第二个看起来是错误的.

css fonts twitter-bootstrap twitter-bootstrap-3

5
推荐指数
1
解决办法
1万
查看次数

使用administrate gem for rails自定义字段

我似乎无法找到有关如何修改管理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_optionsField::BelongsTo可能是要走的路,但哪些选项可用于该字段(或任何其他为此事)?

rubygems ruby-on-rails thoughtbot

5
推荐指数
1
解决办法
1063
查看次数

在Rails 3.1基于资产的应用程序中包含两次javascript

虽然问题的标题与以前的标题非常相似,但我的问题似乎有所不同.

简而言之,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)

javascript ruby-on-rails ruby-on-rails-3.1 asset-pipeline

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