所以,我发现了几个在Rails 2中查找随机记录的例子 - 首选方法似乎是:
Thing.find :first, :offset => rand(Thing.count)
Run Code Online (Sandbox Code Playgroud)
作为一个新手,我不知道如何使用Rails 3中的新查找语法来构造它.
那么,找到随机记录的"Rails 3 Way"是什么?
对于Fibers,我们有一个典型的例子:生成Fibonacci数
fib = Fiber.new do
x, y = 0, 1
loop do
Fiber.yield y
x,y = y,x+y
end
end
Run Code Online (Sandbox Code Playgroud)
为什么我们需要光纤呢?我可以用相同的Proc重写这个(实际上是闭包)
def clsr
x, y = 0, 1
Proc.new do
x, y = y, x + y
x
end
end
Run Code Online (Sandbox Code Playgroud)
所以
10.times { puts fib.resume }
Run Code Online (Sandbox Code Playgroud)
和
prc = clsr
10.times { puts prc.call }
Run Code Online (Sandbox Code Playgroud)
将返回相同的结果.
那么纤维有什么优点呢?我可以用Fibers写什么样的东西我不能用lambdas和其他很酷的Ruby功能?
我经常需要检查一些值是否为空,并写下"没有数据",如下所示:
@user.address.blank? ? "We don't know user's address" : @user.address
Run Code Online (Sandbox Code Playgroud)
当我们有大约20-30个字段,我们需要以这种方式处理它变得丑陋.
我所做的是使用or方法扩展String类
class String
def or(what)
self.strip.blank? ? what : self
end
end
@user.address.or("We don't know user's address")
Run Code Online (Sandbox Code Playgroud)
现在它看起来更好了.但它仍然是原始的和粗糙的
如何解决我的问题会更好.也许最好扩展ActiveSupport class或使用辅助方法或mixins或其他任何东西.什么红宝石的思想,你的经验和最佳实践可以告诉我.
我曾经使用mysql宝石,但现在我经常听说mysql2宝石.此外,它默认包含在Gemfile中Rails 3.0.x.
使用mysql2宝石有什么区别和优点?
我是铁杆的新手,我很难解决这个设计问题,这可能很容易解决,但我无处可去:我有两种不同的广告:亮点和便宜货.它们都具有相同的属性:标题,描述和一个图像(使用回形针).它们也有相同的动作应用于它们:索引,新建,编辑,创建,更新和销毁.
我设置了一个像这样的STI:
广告模型:ad.rb
class Ad < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
讨价还价模型:bargain.rb
class Bargain < Ad
end
Run Code Online (Sandbox Code Playgroud)
突出显示模型:highlight.rb
class Highlight < Ad
end
Run Code Online (Sandbox Code Playgroud)
问题是我想只有一个控制器(AdsController)执行我在讨价还价或亮点上所说的操作,具体取决于URL,比如www.foo.com/bargains [/ ...]或www.foo.com /强调[/...].
例如:
我怎样才能做到这一点?
谢谢!
如何从(非签出)远程仓库中获取最后一个标签?
在我的本地副本上我使用 describe
git describe --abbrev=0 --tags
Run Code Online (Sandbox Code Playgroud)
但我无法使用describe远程存储
在过滤器之前的应用程序控制器
class ApplicationController < ActionController::Base
before_filter :authenticate
def authenticate
# How do we know which controller and action was targetted?
end
end
Run Code Online (Sandbox Code Playgroud) 我有两个型号.
- Parent has_many Children ;
- Parent accepts_nested_attributes_for Children ;
class Parent < ActiveRecord::Base
has_many :children, :dependent => :destroy
accepts_nested_attributes_for :children, :allow_destroy => true
validates :children, :presence => true
end
class Child < ActiveRecord::Base
belongs_to :parent
end
Run Code Online (Sandbox Code Playgroud)
我使用验证来验证每个父母的孩子的存在,所以我不能保存没有孩子的父母.
parent = Parent.new :name => "Jose"
parent.save
#=> false
parent.children_attributes = [{:name => "Pedro"}, {:name => "Emmy"}]
parent.save
#=> true
Run Code Online (Sandbox Code Playgroud)
验证工作.然后我们将通过_destroy属性摧毁孩子:
parent.children_attributes = {"0" => {:id => 0, :_destroy => true}}
parent.save
#=> true !!!
parent.reload.children
#=> []
Run Code Online (Sandbox Code Playgroud)
所以我可以通过嵌套表单销毁所有孩子,验证将通过. …
红宝石可以不归还吗?
仅用于教育目的
例如:
myarray = [1,2,3]
myarray << some_method
def some_method
if Date.today.day > 15
return "Trololo"
else
return __NOTHING__
end
end
Run Code Online (Sandbox Code Playgroud)
因此,如果今天是3月11日myarray将不会添加新项目.我不想nil- 因为nil不是没有:)
我明白了,我可以使用if | unless的语句像myarray << some_method if some_method等.我想了解我能回报什么的红宝石或每次我回来的东西(至少我可以得到的是无对象)
如果我有一个分页项的ID,我怎么能找到它的页码?
我正在使用rails 3和kaminari.
不幸的是,将页码作为参数传递不是一种选择.分页项是由用户生成的内容随时间演变而维护的图像库的图像.这意味着图像可能会出现在第一周的第一页上,而后一周则出现在第二页上.
另一种选择是保持图像的数字顺序(acts_as_list),在我的情况下这是不可能的,因为照片可能出现在不同范围的多个画廊中.
编辑:
为此我添加了一笔赏金,因为我看到几年前在不同地方提出的同样问题没有解决方案.如果没有活动记录解决方案,我很乐意接受SQL查询.
ruby ×8
activerecord ×1
closures ×1
database ×1
fibers ×1
git ×1
git-describe ×1
git-tag ×1
lambda ×1
mysql ×1
pagination ×1
proc ×1
random ×1
rubygems ×1
sql ×1