标签: ruby

在Rails应用程序中实现"记住我"

我的Rails-app有一个带有"记住我"复选框的登录框.检查该框的用户即使在关闭浏览器后仍应保持登录状态.我通过在用户的会话中存储他们的id来跟踪用户是否登录.

但会话在Rails中实现为会话cookie,而不是持久性的.我可以它们持久化:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但这似乎是一种黑客攻击,这对于这种常见功能而言是令人惊讶的.有没有更好的方法?

编辑

Gareth的答案非常好,但我仍然希望得到Rails 2熟悉的人的回答(因为它是独一无二的CookieSessionStore).

ruby ruby-on-rails http

52
推荐指数
5
解决办法
1万
查看次数

为什么Ruby没有真正的StringBuffer或StringIO?

我最近阅读了一篇关于在Ruby中使用的好文章StringIO.但是,作者没有提到的是,这StringIO只是一个"我".没有"O".你不能这样做,例如:

s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`
Run Code Online (Sandbox Code Playgroud)

Ruby确实需要一个像Java一样的StringBuffer.StringBuffers有两个重要目的.首先,它们让您测试Ruby的StringIO所做的输出的一半.其次,它们对于从小部件构建长弦很有用 - Joel一次又一次地提醒我们的是非常慢的东西.

有替代品吗?

Ruby中的字符串确实是可变的,但这并不意味着我们应该始终依赖于该功能.如果stuff很大,例如,它的性能和内存要求非常糟糕.

result = stuff.map(&:to_s).join(' ')
Run Code Online (Sandbox Code Playgroud)

在Java中执行此操作的"正确"方法是:

result = StringBuffer.new("")
for(String s : stuff) {
  result.append(s);
}
Run Code Online (Sandbox Code Playgroud)

虽然我的Java有点生疏.

ruby string io buffer

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

Ruby中的这个和块是什么?它是如何通过这里的方法传递的?

在Ruby on Rails书中看到这段代码.第一个是视图,第二个是辅助模块.我不明白怎么&blockattributes={}东西的工作.任何人都可以指导我一个解释这个的教程吗?

<% hidden_div_if(@cart.items.empty?, :id => "cart") do %>
 <%= render(:partial => "cart", :object => @cart) %>
<% end %>

module StoreHelper
 def hidden_div_if(condition, attributes = {}, &block)
  if condition
   attributes["style"] = "display: none"
  end
   content_tag("div", attributes, &block)
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

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

Ruby的所有/最佳宝石列表?

我已经离开了Ruby世界一段时间(3年),但我回来参加一个项目.我现在被所有可用的宝石所震撼.人气/最佳宝石是否有宝石列表?所有宝石的当前列表在哪里?

ruby rubygems

52
推荐指数
3
解决办法
5万
查看次数

如何在Ruby的IRB中启用自动完成

当我使用Merb的内置控制台时,我得到类似于标准bash提示的选项卡自动完成.我觉得这很有用,并希望在非merb IRB会话中启用它.如何在IRB中自动完成?

ruby irb tab-completion

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

Rails:named_scope,lambda和blocks

我认为以下两个是等价的:

named_scope :admin, lambda { |company_id| {:conditions => ['company_id = ?', company_id]} }

named_scope :admin, lambda do |company_id| 
  {:conditions => ['company_id = ?', company_id]}
end
Run Code Online (Sandbox Code Playgroud)

但Ruby抱怨道:

ArgumentError: tried to create Proc object without a block
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ruby lambda ruby-on-rails

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

如何获取Ruby中给定月份的天数,占一年?

我确信在Ruby中有一个很好的简单优雅的单行程,可以给你一个月的天数,占一年,例如"1997年2月".它是什么?

ruby date

52
推荐指数
8
解决办法
4万
查看次数

如何在Ruby中使类构造函数成为私有的?

class A
private
  def initialize
    puts "wtf?"
  end
end

A.new #still works and calls initialize
Run Code Online (Sandbox Code Playgroud)

class A
private
  def self.new
    super.new
  end
end
Run Code Online (Sandbox Code Playgroud)

不起作用

那么正确的方法是什么?我想new私有化并通过工厂方法调用它.

ruby constructor access-specifier

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

Ruby和JRuby有什么区别?

任何人都可以用外行的术语向我提供开发JRuby和Ruby,Rails应用程序之间的区别吗?

我使用NetBeans作为我的Ruby on Rails IDE,每次我创建一个项目都会问我这个问题 - 而且我并没有真正发挥作用.有任何赞成和缺点吗?

ruby ruby-on-rails jruby

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

在Ruby中,获取数组中最大值索引的最简洁方法是什么?

如果a是数组,我想要a.index(a.max),但更像Ruby的东西.这应该是显而易见的,但我无法在其他地方找到答案.显然,我是Ruby的新手.

ruby arrays indexing max

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