我的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中使用的好文章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 on Rails书中看到这段代码.第一个是视图,第二个是辅助模块.我不明白怎么&block和attributes={}东西的工作.任何人都可以指导我一个解释这个的教程吗?
<% 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世界一段时间(3年),但我回来参加一个项目.我现在被所有可用的宝石所震撼.人气/最佳宝石是否有宝石列表?所有宝石的当前列表在哪里?
当我使用Merb的内置控制台时,我得到类似于标准bash提示的选项卡自动完成.我觉得这很有用,并希望在非merb IRB会话中启用它.如何在IRB中自动完成?
我认为以下两个是等价的:
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中有一个很好的简单优雅的单行程,可以给你一个月的天数,占一年,例如"1997年2月".它是什么?
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私有化并通过工厂方法调用它.
任何人都可以用外行的术语向我提供开发JRuby和Ruby,Rails应用程序之间的区别吗?
我使用NetBeans作为我的Ruby on Rails IDE,每次我创建一个项目都会问我这个问题 - 而且我并没有真正发挥作用.有任何赞成和缺点吗?
如果a是数组,我想要a.index(a.max),但更像Ruby的东西.这应该是显而易见的,但我无法在其他地方找到答案.显然,我是Ruby的新手.