Tag: activerecord

用于rails控制器中create方法的sql注入预防

如comment_controller.rb中所示: def create @comment = Comment.new(params[:comment]) @comment.save end 我假设这是SQL注入 – 不安全。 但这样做的正确方法是什么?..网上的所有例子都涉及到发现。

PG :: GroupingError:错误:列“events.id”必须出现在GROUP BY子句中或用于聚合函数

事件具有列popularity和许多关键字。 关键字具有类别和名称。 我试图通过它们的受欢迎程度来命令事件,但是只返回每个关键字名称中最受欢迎的事件,其类别为“分类法”。 这是我的查询: Event .order(:popularity) .joins(:keywords) .where(keywords: {category: “taxonomy”}) .group(“keywords.name”) 但我得到以下错误: PG :: GroupingError:错误:列“events.id”必须出现在GROUP BY子句中或用于聚合函数 我哪里错了?

ActiveRecord用户提供的列名

我试图允许rails应用程序的最终用户根据任意列的值限制结果。 最简单的是,我想做一些大致等同于: “SELECT * FROM products WHERE (#{params[:min_col]} >= #{params[:min]})” 没有注射漏洞。 例如, example.com/myapp/catalog?min_col=sell_price&min=300 myapp/catalog?min_col=sell_price&min=300将返回sell_price大于或等于$ 3.00的所有产品 我尝试将这样的范围添加到模型中: ->(column,min) { where(“? >= ?”, column, min) } 并将uri参数传递给该范围,但这会产生 WHERE (‘sell_price’ >= ‘300’) 这似乎只是比较两个文字字符串 – 这个查询和其他像它总是返回每一行或没有行。 如何获得与params指定的列进行比较所需的行为?

PostgreSQL + Rails citext

我正在尝试迁移到使用PostgreSQL 8.4的heroku,它有一个citext列类型,这是很好的,因为该应用程序是为MySQL编写的。 有没有办法使用:带有rails的citext(如果迁移是在MySQL上运行的,那么citext只会使用字符串/文本? 我找到了这张票,但似乎它暂时不会成为rails的一部分: https : //rails.lighthouseapp.com/projects/8994/tickets/3174-add-support-for-postgresql- citext列型

Heroku(PG ::错误:错误:列必须出现在GROUP BY子句中或用于聚合函数

我在Heroku上收到此错误但不在本地(在两者上使用PostgreSQL)。 错误是: ActiveRecord::StatementInvalid (PG::Error: ERROR: column “posts.content” must appear in the GROUP BY clause or be used in an aggregate function 我怀疑它与我的post模型中的这一行有关: scope :with_tags, lambda { |tags| joins(:tags).group(‘posts.id’).where(:tags => { :id => tags.map { |t| t.id } } ).having(“COUNT(*) = ?”, tags.length) } 为什么它只发生在Heroku上? 我如何解决它 ?

created_at和updated_at列来自哪里?

由rails应用程序创建的数据库中的所有表似乎都有created_at和updated_at列。 什么创造了这些? 它们是可选的,还是内部依赖它们?

rails列由多列组成

我有预算表与emptype_id和calendar_id actual_head,estimated_head 当我做Budgets.sum(:actual_head ,:group=>”emptype_id,calendar_id”)我没有得到按上述两列分组的结果,但只有emptype_id 但是,当我检查日志时,sql查询是正确的 SELECT sum(`budgets`.actual_head) AS sum_actual_head, emptype_id,calendar_id AS emptype_id_calendar_id FROM `budgets` GROUP BY emptype_id,calendar_id 有103行 我想迭代每个emptype_id和calendar_id来获得actual_head的总和并对其进行一些计算。

如何为Rails Association :: Preloader设置预加载范围?

我需要预先加载模型与复杂条件的关联。 不, includes对我不起作用。 它为我的任务生成错误的SQL。 我看一下ActiveRecord::Associations::Preloader ,发现他采用了preload_scope参数: http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/Preloader/preload def preload(records, associations, preload_scope = nil) # … end 但我找不到任何使用它的例子。 在这种情况下什么是preload_scope ? 我如何使用它来过滤关联? 谢谢!

ActiveRecord选择参数绑定

我想使用ActiveRecord的子查询,如下所示: User.select( ‘users.*, (select sum(amount) from subscriptions where subscriptions.user_id = user.id and created_at < ? ) as amt)' ).order('amt') 但是,在倒数第二行,我遇到的问题是我无法弄清楚如何绑定Time类参数,因为ActiveRecord::Base的select方法不接受多个参数(sql string) 。 我该怎么办?

rails – using:select(distinct)with:has_many:通过关联产生无效的SQL

User has_many :posts has_many :post_tags, :through => :posts PostTag belong_to :post belongs_to :tag scope :distincttag, :select => (‘distinct post_tags.tag_id’) 使用Rails 3.0.4,我得到无效的SQL:SELECT post_tags。*,distinct tag_id … 至少有一个人遇到了同样的问题: http : //www.ruby-forum.com/topic/484938 function或错误? 谢谢