为什么这种创建私有类方法的方法有效:
class Person
def self.get_name
persons_name
end
class << self
private
def persons_name
"Sam"
end
end
end
puts "Hey, " + Person.get_name
puts "Hey, " + Person.persons_name #=> raises "private method `persons_name' called for Person:Class (NoMethodError)"
Run Code Online (Sandbox Code Playgroud)
但这不是:
class Person
def self.get_name
persons_name
end
private
def self.persons_name
"Sam"
end
end
puts "Hey, " + Person.get_name
puts "Hey, " + Person.persons_name
Run Code Online (Sandbox Code Playgroud) 我正在处理Rails和Postgres中的日期和时间并遇到这个问题:
数据库采用UTC格式.
用户在Rails应用程序中设置选择的时区,但仅在获取用户本地时间来比较时间时使用.
用户存储时间,例如2012年3月17日晚上7点.我不希望存储时区转换或时区.我只想保存日期和时间.这样,如果用户改变他们的时区,它仍将显示2012年3月17日,晚上7点.
我只使用用户指定的时区来获取用户本地时区当前时间之前或之后的记录.
我目前正在使用"没有时区的时间戳",但是当我检索记录时,rails(?)会将它们转换为应用程序中的时区,这是我不想要的.
Appointment.first.time
=> Fri, 02 Mar 2012 19:00:00 UTC +00:00
Run Code Online (Sandbox Code Playgroud)
因为数据库中的记录似乎是以UTC形式出现的,我的黑客是用当前时间,用'Date.strptime(str,"%m /%d /%Y")删除时区,然后做我的查询:
.where("time >= ?", date_start)
Run Code Online (Sandbox Code Playgroud)
似乎必须有一种更简单的方法来忽略周围的时区.有任何想法吗?
有谁知道怎么解决这个问题?在OSX上,尝试使用Rails 3.0.7运行RSpec.详情请访问:https: //gist.github.com/1017044
it "renders buttons_widgets partial" do
get :buttons_widgets
response.should render_template("buttons_widgets")
end
? rspec tools_model_spec.rb
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized constant CONDITIONAL_FILTERS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:48: warning: already initialized constant DEFAULT_BACKTRACE_PATTERNS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/runner.rb:13: warning: already initialized constant AT_EXIT_HOOK_BACKTRACE_LINE
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core.rb:35: warning: already initialized constant SharedContext
Run filtered excluding {:if=>#<Proc:/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:43>, :unless=>#<Proc:/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:44>}
F
Failures:
1) …Run Code Online (Sandbox Code Playgroud) 我正在尝试这样做,但它不起作用.我如何在Rails 3中执行此操作?
Student.find(12).includes(:teacher)
Run Code Online (Sandbox Code Playgroud) 我从我的控制器调用了几种方法,感觉它们应该被拔出并放入控制器之外的可重用类中.人们通常把这些东西放在哪里?我知道我可以将它们放入我的ApplicationController中,但如果我认为以后可以在其他应用程序中使用这些方法,那似乎不是一个很好的解决方案.
另外,我的控制器中有很多实用程序方法,可能不会在其他控制器中使用,或者将来根本不会使用,但我觉得它们只是膨胀了我的控制器.人们通常是将它们移到某个地方以保持清洁,还是最终得到一个巨大的控制器?
我来自Java和Actionscript,我只是为这些东西创建新的util类.
我有一个调用rails的ajax调用:
$.ajax({
type: "POST",
url: '...',
data: ({ ...
}),
success: function(response, status) {
console.log(status);
}
});
Run Code Online (Sandbox Code Playgroud)
在rails控制器中,我只是从数据库中删除一个条目,我只想返回它是否成功.什么是最好的方式?
我应该在respond_to中返回JSON吗?如果是这样,你究竟会包含什么?
我的主要设计路线是:
devise_for :accounts, :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin'
Run Code Online (Sandbox Code Playgroud)
然后我想要一个新的url/action,所以我在上面的devise_for行之前添加以下内容:
match '/accounts/signedup/' => 'users/accounts/registrations#signedup':
Run Code Online (Sandbox Code Playgroud)
然后在控制器中我有signedup动作,但当我去myurl.com/accounts/signedup时,目前只有:
def signedup
Rails.logger.debug { "&& signed_up" }
end
Run Code Online (Sandbox Code Playgroud)
然后我去myurl.com/accounts/signedup我得到:
AbstractController::ActionNotFound (AbstractController::ActionNotFound):
Run Code Online (Sandbox Code Playgroud)
但是,如果我从控制器中删除def signedup,我会得到:
The action 'signedup' could not be found for Users::Accounts::RegistrationsController"
Run Code Online (Sandbox Code Playgroud)
知道什么是错的吗?
有没有办法让所有追加和/或前置的输入具有匹配的宽度?
这是一个例子,但是你可以看到,给定多个带有各种长度的附加/前置的输入,这些都将导致不同的宽度,并且它看起来不会很好.
我正在尝试通过Resque发送Devise电子邮件.
通过Resque发送普通电子邮件就好了.并且Devise电子邮件发送得很好,但不会通过Resque发送电子邮件.我得到"找不到有效的映射",这意味着我的帮助程序覆盖不会被拾取.
我正在关注这个http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/
奇怪的是,调试它我正在使用Devise的本地副本,并在Devise中的'initialize_from_record'中添加断点,当我仅使用Devise时会受到攻击.但是当我通过resque发送Devise电子邮件时,断点不会受到影响:
class ResqueMailer < Devise::Mailer
include Resque::Mailer
end
config.mailer = "ResqueMailer"
Run Code Online (Sandbox Code Playgroud)
而resque则显示一个打包的gem路径,而不是我的本地源,例如:
/Users/mm/.rvm/gems/ruby-1.9.2-p290@evergreen/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail'
Run Code Online (Sandbox Code Playgroud)
知道为什么它不使用我的本地宝石源和/或如何让Resque发送我的Devise电子邮件?
Rails 3.1+我希望我的url帮助程序使用https协议,而不必在我调用的每个帮助程序中指定它.搜索后我发现了各种各样的方法但没有工作,例如:
ROUTES_PROTOCOL = (ENV["RAILS_ENV"] =~ /development/ ? 'http://' : 'https://')
scope :protocol => ROUTES_PROTOCOL, :path => "/app" do
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?