Rails大师:我刚刚发现named_scope感谢另一个SO用户.:)
我想得到一组行的计数 - 即a SELECT COUNT(*).另外,我希望仍然能够在调用中链接命名范围.
这是命名范围的合法(尽管是奇怪的)用法吗?
named_scope :count, :select => "COUNT(*) as count_all"
Run Code Online (Sandbox Code Playgroud)
那么我可以做(例如):
@foobar = Foobar.count.scope.scope.scope
Run Code Online (Sandbox Code Playgroud)
通过访问计数@foobar.first.count_all.
(编辑解决艾伦的评论)
你可以这样做:
@foobar = Foobar.scope.scope.scope.size
Run Code Online (Sandbox Code Playgroud)
但这会导致结果查询而不是更快的SELECT COUNT(*)查询.我在查询的数据库中有大量的行.
有一个更好的方法吗?
鉴于以下网址:
http://foo.com?bar=1&wee=2
Run Code Online (Sandbox Code Playgroud)
从动作中获取URL的原始参数部分的最快方法是什么?
即
?bar=1&wee=2
Run Code Online (Sandbox Code Playgroud) 除了MYSQL中的行数据之外,获得行级别的最佳方法是什么?
例如,假设我有一份学生名单,我想在GPA中排名.我知道我可以通过GPA订购,但是有什么最快的方式让MYSQL在我回来的rowdata中返回等级?
我对Rails相当陌生,我很好奇一些专家在需要构建包含许多条件的非常复杂的SQL查询时正在使用的约定.具体来说,保持代码可读和可维护.
我可以想到几种方法:
单行,在调用find()时:
@pitchers = Pitcher.find(:all, "<conditions>")
Run Code Online (Sandbox Code Playgroud)
使用预定义的字符串并将其传递给:
@pitchers = Pitcher.find(:all, @conditions)
Run Code Online (Sandbox Code Playgroud)
使用私有成员函数返回查询
@pitchers = Pitcher.find(:all, conditionfunction)
Run Code Online (Sandbox Code Playgroud)
我更倾向于私有成员函数约定,另外因为您可以传入参数来自定义查询.
有什么想法吗?
假设我有两个表,一个包含个人信息的学生主列表,以及一个班级中的学生注册列表.这两个表共享一个公共列,这是一个唯一标识学生的字符串,但它不是主键.
假设我想显示页面上的所有注册,以及来自学生的一些个人数据(比如说可能是家乡).
我明白这将是一个非常多的关系.主列表记录有许多注册.注册属于学生.
class Student < ActiveRecord::Base
has_many :enrollments
end
class Enrollment < ActiveRecord::Base
belongs_to :student
end
Run Code Online (Sandbox Code Playgroud)
这是两者之间的正确关系,如果是这样,我如何对共享列进行连接查询?
考虑以下DllImport:
[DllImport("lulz.so")]
public static extern int DoSomething(IntPtr SomeParam);
Run Code Online (Sandbox Code Playgroud)
这实际上引用了这样的C风格函数:
int DoSomething(void* SomeParam);
Run Code Online (Sandbox Code Playgroud)
考虑SomeParam是一个"out"参数,但也可以是NULL.如果param为NULL,则C函数的行为会有所不同.所以我可能想要:
[DllImport("lulz.so")]
public static extern int DoSomething(out IntPtr SomeParam);
Run Code Online (Sandbox Code Playgroud)
但是,如果我在导入中将它设为out参数,我就无法将其传递为NULL,即我不能这样做:
int retVal = DoSomething(IntPtr.Zero)
Run Code Online (Sandbox Code Playgroud)
我有什么选择?