小编bra*_*rad的帖子

ARel模仿包含find_by_sql

我有一个相当复杂的SQL查询,我很确定我无法用ARel完成(Rails 3.0.10)

查看链接,但它有一些连接和一个where exists子句,我很确定对于ARel来说太复杂了.

然而我的问题是,在此查询过于复杂之前,使用ARel我可以使用includes其他模型来避免n + 1问题.既然我正在使用find_by_sql,那就不行了includes.我仍然希望能够获取这些记录并将它们附加到我的模型实例,方式includes如此,但我不太确定如何实现这一点.

有人能指出我正确的方向吗?

我还没有尝试在同一个查询中加入它们.我只是不确定它们将如何映射到对象(即,如果ActiveRecord将它们正确映射到正确的类)

我知道当使用includesActiveRecord实际进行第二次查询时,会以某种方式将这些行附加到原始查询中的相应实例.有人可以告诉我如何做到这一点吗?或者我是否需要加入相同的查询?

sql join arel ruby-on-rails-3

11
推荐指数
1
解决办法
2051
查看次数

在CSS中的图像上的Rails时间戳

所以Rails时间戳很棒.我正在使用它将expires标头添加到以10位数时间戳结尾的所有文件.然而,我的大多数图像都在我的CSS中引用.有没有人遇到任何允许将时间戳添加到CSS引用图像的方法,或者实现此目的的一些时髦的重写规则?我喜欢我站点中的所有图像,内联和css都有这个时间戳,所以我可以告诉浏览器缓存它们,但是在文件本身发生变化时刷新.

我在网上找不到任何关于此的内容,我无法相信这不是一个更常讨论的话题.

我不认为我的设置会很重要,因为根据10位数的时间戳,实际到期将有希望以相同的方式发生,但是如果重要的话,我正在使用apache来提供所有静态内容

apache ruby-on-rails

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

Rails accepted_nested_attributes_for child在验证时没有父集

我在验证时试图在我的子模型中访问我的父模型.我在has_one上发现了一些关于反属性的东西,但是我的Rails 2.3.5无法识别它,所以它一定没有进入发行版.我不确定它是否正是我所需要的.

我想根据父属性有条件地验证子项.我的父模型已经创建.如果在我对父项进行update_attributes时尚未创建子项,则它无权访问父项.我想知道如何访问这个父母.它应该很简单,像parent.build_child这样设置子模型的parent_id,为什么在为accepts_nested_attributes_for构建子项时没有这样做?

例如:

class Parent < AR
  has_one :child
  accepts_nested_attributes_for :child
end
class Child < AR
  belongs_to :parent
  validates_presence_of :name, :if => :some_method

  def some_method
    return self.parent.some_condition   # => undefined method `some_condition' for nil:NilClass
  end
end
Run Code Online (Sandbox Code Playgroud)

我的表格是标准的:

<% form_for @parent do |f| %>
  <% f.fields_for :child do |c| %>
    <%= c.name %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

使用更新方法

def update
  @parent = Parent.find(params[:id])
  @parent.update_attributes(params[:parent])   # => this is where my child validations take place
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails relationships

10
推荐指数
4
解决办法
6113
查看次数

ActiveRecord找到所有有关联孩子的父母

我不知道为什么我无法解决这个问题,我认为应该相当简单.我有两个型号(见下文).我正在尝试为SupplierCategory提出一个命名范围,该范围将找到所有SupplierCategory(s)(包括:供应商),其关联的供应商不是空的.

我尝试了一个直接加入,named_scope :with_suppliers, :joins => :suppliers它只给了我与供应商的类别,但它给了我每个类别单独列出,所以如果一个类别有2个供应商,我在返回的数组中获得两次类别:

目前我正在使用:

named_scope :with_suppliers, :include => :suppliers
Run Code Online (Sandbox Code Playgroud)

然后在我看来我正在使用:

<%= render :partial => 'category', :collection => @categories.find_all{|c| !c.suppliers.empty? } %>
Run Code Online (Sandbox Code Playgroud)

不完全雄辩,但说明了我想要实现的目标.

类定义

class SupplierCategory < AR
  has_many :suppliers, :order => "name"
end

class Supplier < AR
  belongs_to :supplier
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails associations

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

API设计和安全性:为什么要隐藏内部ID?

我听说有些人说你不应该把你的内部ID暴露给外面的世界(例如auto_increment'ng主键).

有人建议使用某种uuid列来代替查找.

我想知道为什么会这样建议,如果真的很重要的话.

使用uuid基本上只是混淆了id.重点是什么?我唯一能想到的是auto_incrementing整数显然指出了我的db对象的顺序.如果外部用户知道有一件事是在另一件事之前/之后创建的,那有关系吗?

或者纯粹是混淆id会阻止对特定对象的不同操作进行"猜测"?

在设计面向外部的API时,这是否是我应该考虑的问题?

security api database-design

10
推荐指数
3
解决办法
2943
查看次数

safari和gzip

我正在我的网站(http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js)上加载jQuery jQuery 和gzip.在firefox中,jquery文件显示为19k请求,但Safari将其显示为56k请求.我假设Safari不接受它作为gzip文件.这是怎么回事?它来自谷歌,我很确定它应该是gzip

javascript safari

9
推荐指数
3
解决办法
8372
查看次数

git hooks以及它们如何工作

所以我试图通过post-receive钩子来构建hudson.在我的本地git repo中,我将post-receive.sample设置为post-receive,chmod 755并添加到行中:

/usr/bin/curl -u user:secret http://localhost:8080/hudson/job/MyJob/build?token=secondsecret
Run Code Online (Sandbox Code Playgroud)

如果我强制构建,hudson会更新代码,但是这里是我不理解的,那个repo中的钩子没有像他们在本地那样的.sample,而且在hudson repo中的post-receive没有上面有那行代码.这里发生了什么以及如何将钩子集成到整个git进程中?我需要更改远程仓库上的这个钩子吗?我本以为在本地做这件事就足够了,所以任何从该回购中取出的人都会得到新的钩子.我无法理解另一个用户的repo将如何具有不同的钩子.

git hook

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

Ruby的一般分隔输入的优缺点是什么?(语法百分比)

我不明白为什么有些人会在ruby中使用百分比语法.

例如,我正在阅读ruby插件指南,它使用如下代码:

%w{ models controllers }.each do |dir|
  path = File.join(File.dirname(__FILE__), 'app', dir)
  $LOAD_PATH << path
  ActiveSupport::Dependencies.load_paths << path
  ActiveSupport::Dependencies.load_once_paths.delete(path)
end
Run Code Online (Sandbox Code Playgroud)

每当我看到这样的东西时,我都要去查找百分比语法参考,因为我不记得%w的含义.

这种语法真的比较["models", "controllers"].each ...好吗?

我认为在后一种情况下,我更清楚的是我已经定义了一个字符串数组,但在前者中 - 特别是对于学习红宝石的人 - 它似乎并不那么清楚,至少对我而言.

如果有人可以告诉我,我在这里遗漏了一些关键点,那么请这样做,因为我很难理解为什么百分比语法似乎是绝大多数ruby程序员的首选.

ruby syntax

9
推荐指数
1
解决办法
984
查看次数

AREL中的分组和分组

我正在尝试使用arel查询此sql代码段的等效内容:

WHERE (("participants"."accepted" = 'f' AND "participants"."contact_id" = 1) 
  OR "participants"."id" IS NULL)
Run Code Online (Sandbox Code Playgroud)

所以我想要 (accepted && contact_id=1) OR NULL

这是我在AREL中得到的

participants[:accepted].eq(false).and(participants[:contact_id].eq(1).
  or(participants[:id].is(nil)
Run Code Online (Sandbox Code Playgroud)

问题是,这会产生:

("participants"."accepted" = 'f' AND "participants"."contact_id" = 1 OR "participants"."id" IS NULL)
Run Code Online (Sandbox Code Playgroud)

请注意我和条件周围缺少括号.我相信根据运营商的优先顺序,我得到了:

accepted && (contact_id=1 OR NULL)
Run Code Online (Sandbox Code Playgroud)

在AREL查询中添加括号没有任何影响.有什么想法吗?

ruby sql arel

9
推荐指数
2
解决办法
3932
查看次数

Rails 2.3.x相当于Rails3的可选路由参数

在Rails 3中,我可以这样做:

match "/page(/:section)", :to => 'some_controller#page'
Run Code Online (Sandbox Code Playgroud)

而且两者/page/page/some_section会映射到some_controller#页

在Rails 2.3.x中是否有相同的功能?我似乎找不到它

我目前正在使用两种不同的路由方法,如下所示:

map.page          '/page',          :action => 'page'
map.page_section  '/page/:section', :action => 'page'
Run Code Online (Sandbox Code Playgroud)

routing ruby-on-rails

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