小编fl0*_*00r的帖子

Rails 3:获取随机记录

所以,我发现了几个在Rails 2中查找随机记录的例子 - 首选方法似乎是:

Thing.find :first, :offset => rand(Thing.count)
Run Code Online (Sandbox Code Playgroud)

作为一个新手,我不知道如何使用Rails 3中的新查找语法来构造它.

那么,找到随机记录的"Rails 3 Way"是什么?

ruby random activerecord ruby-on-rails ruby-on-rails-3

131
推荐指数
6
解决办法
7万
查看次数

为什么我们需要纤维

对于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功能?

ruby lambda closures fibers proc

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

如果string为空,则返回一些默认值

我经常需要检查一些值是否为空,并写下"没有数据",如下所示:

@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或其他任何东西.什么红宝石的思想,你的经验和最佳实践可以告诉我.

ruby ruby-on-rails

90
推荐指数
2
解决办法
6万
查看次数

mysql和mysql2 gem有什么区别

我曾经使用mysql宝石,但现在我经常听说mysql2宝石.此外,它默认包含在GemfileRails 3.0.x.

使用mysql2宝石有什么区别和优点?

ruby mysql rubygems ruby-on-rails

68
推荐指数
2
解决办法
3万
查看次数

STI,一个控制器

我是铁杆的新手,我很难解决这个设计问题,这可能很容易解决,但我无处可去:我有两种不同的广告:亮点和便宜货.它们都具有相同的属性:标题,描述和一个图像(使用回形针).它们也有相同的动作应用于它们:索引,新建,编辑,创建,更新和销毁.

我设置了一个像这样的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 /强调[/...].

例如:

  • 获取www.foo.com/highlights =>所有重点广告的列表.
  • 获取www.foo.com/highlights/new =>表格以创造新的亮点......

我怎样才能做到这一点?

谢谢!

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

58
推荐指数
3
解决办法
2万
查看次数

从远程仓库获取最后一个git标签而不进行克隆

如何从(非签出)远程仓库中获取最后一个标签?

在我的本地副本上我使用 describe

git describe --abbrev=0 --tags
Run Code Online (Sandbox Code Playgroud)

但我无法使用describe远程存储

git git-tag git-describe

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

如何使用Rails 3获取请求的目标控制器和操作?

在过滤器之前的应用程序控制器

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)

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

44
推荐指数
4
解决办法
3万
查看次数

嵌套模型和父级验证

我有两个型号.
- 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)

所以我可以通过嵌套表单销毁所有孩子,验证将通过. …

ruby ruby-on-rails nested-attributes

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

Ruby什么都不返回?

红宝石可以不归还吗?

仅用于教育目的

例如:

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等.我想了解我能回报什么的红宝石或每次我回来的东西(至少我可以得到的是无对象)

ruby

18
推荐指数
4
解决办法
9264
查看次数

Rails分页 - 从实例ID中查找页码

如果我有一个分页项的ID,我怎么能找到它的页码?

我正在使用rails 3和kaminari.

不幸的是,将页码作为参数传递不是一种选择.分页项是由用户生成的内容随时间演变而维护的图像库的图像.这意味着图像可能会出现在第一周的第一页上,而后一周则出现在第二页上.

另一种选择是保持图像的数字顺序(acts_as_list),在我的情况下这是不可能的,因为照片可能出现在不同范围的多个画廊中.

编辑:

为此我添加了一笔赏金,因为我看到几年前在不同地方提出的同样问题没有解决方案.如果没有活动记录解决方案,我很乐意接受SQL查询.

sql database pagination ruby-on-rails ruby-on-rails-3

15
推荐指数
1
解决办法
3198
查看次数