#4 楼 @Saito 也可以用继承或 alias_method_chain
[1] pry(main)> class Cool
[1] pry(main)* def say
[1] pry(main)* puts "cool"
[1] pry(main)* end
[1] pry(main)* end
=> nil
[2] pry(main)> class CoolWithLog < Cool
[2] pry(main)* def say
[2] pry(main)* super
[2] pry(main)* puts "log it"
[2] pry(main)* end
[2] pry(main)* end
=> nil
[3] pry(main)> CoolWithLog.new.say
cool
log it
Rails 插件不都是用的这种方式么
#16 楼 @smoothdvd 都已经返回 false 值了,用defined?
做什么?
#12 楼 @smoothdvd 虽然还是没明白你的意思。。但是如果表单设计的让代码很难表示,说明表单设计的有问题。
#10 楼 @smoothdvd 你说什么叫 boolean 是否存在?
#3 楼 @smoothdvd 看到频繁用.nil?
的就知道用 Ruby 不超过半年...
正常的写法就是:
if condition
else
end
如果是 rails 表单传过来的值,可能有空字符串或换行:
if params[:xxx].present?
else
end
也有需要用.nil?的时候,就是要和 false 做特别区分的:
# 类似5楼的例子
enabled = true if enabled.nil?
很正常
#3 楼 @quakewang 可以了 多谢!
#1 楼 @quakewang 我在本地用那个带 mmseg4j 的 server 测试,效果也一样。是还需要其他配置吗
把是否为管理员签名到 cache key 里,比如:
key ->"cache/xx/x/xxx/#{current_admin?}"
自相矛盾
取出来再 suffle
ActiveRecord::Base.connection.execute("select id,created_at from users limit 10 union select id,created_at from articles limit 10;")
要注意两个表的列数要相同。
跑题一下:
类变量
和类的实例变量
是有区别的。
1.类的实例变量
就和普通变量一样,存在对象里。只不过这个类是 Class,因为所有的类都是 Class 的实例。这就是 Ruby 里说的一切都是对象。
2.类变量
我的理解是:类范围内的全局变量,他可以被实例和类本身访问/修改,可以被继承。
#26 楼 @zlx_star 不是,举个简单的例子,我想知道 User.first 这个方法在哪里定义的:
script/rails runner "require 'tracer';Tracer.on{User.first}" > log/tracer.log
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/querying.rb:5:ActiveRecord::Querying:-: delegate :find, :first, :first!, :last, :last!, :all, :exists?, :any?, :many?, :to => :scoped
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:30:ActiveRecord::Scoping::Named::ClassMethods:>: def scoped(options = nil)
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:31:ActiveRecord::Scoping::Named::ClassMethods:-: if options
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping/named.rb:34:ActiveRecord::Scoping::Named::ClassMethods:-: if current_scope
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:125:ActiveRecord::Scoping::ClassMethods:>: def current_scope #:nodoc:
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:126:ActiveRecord::Scoping::ClassMethods:-: Thread.current["#{self}_current_scope"]
#0:/home/hooopo/.rvm/gems/ruby-1.9.3-p0@rubyist/gems/activerecord-3.2.6/lib/active_record/scoping.rb:127:ActiveRecord::Scoping::ClassMethods:<: end
后面还有很多。。。
Started GET "/messages/1" for 127.0.0.1 at 2012-07-28 16:06:57 +0800
Processing by MessagesController#show as HTML
Parameters: {"id"=>"1"}
然后,看具体错误:
ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"notes", :id=>nil}):
app/views/messages/show.html.erb:18:in `_app_views_messages_show_html_erb__799486363__610448278'
是在 app/views/messages/show.html.erb:18 这个文件的第 18 行,可以贴一下代码么
ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :user in model Department. Try 'has_many :directs, :through => :departments, :source => <name>'. Is it one of :departments_users, :users, :departments_managers, or :managers?
has many through 要加 source 的,标识你的 sql 最终是从哪个表里面获取数据。
你确定你的message#show相关部分没有重定向逻辑或调用edit_note_path什么的?还有你要先查看日志,确定请求是直接访问的messages#show还是直接报错。
如果没有你可以去给 rails 提 issue 了。。
找 bug 的时候常用 tracer,这东西查源码也可以。
这个只能在 sunspot_solr_mmseg4j 目录启动么 在其他路径启动会报错。
Pro Tip: symbols are not garbage collected, so avoid using
to_sym
on strings from user input.