不容错过
你在这工作过?
这样吧
SecondReview.new(user: user).save!
但难免团队里有人用回你说的那种,然后就悲剧了
create_second_review!
是先 save(因为你加了 validate,会 save 不了),然后再替换(删除原关联)
而build_second_review.save!
是先替换(在 build 这一步),然后再 save(在save!
这一步)
源码分别是 activerecord-5.1.2/lib/active_record/associations/has_one_association.rb 里的_create_record
和build
改成这样试试
def method_missing(method, *args)
puts caller
puts "----method_missing called: #{self}, #{self.class}, #{method}"
super
end
puts `ls`
结合之前@hooopo的实验:http://hooopo.iteye.com/blog/370726
(TOPLEVEL_BINDING 的方法会定义成 Object 的 private instance method)
猜测,反引号内会调用 to_ary 方法,但执行 shell 命令返回的内容被包装成 String 是没有 to_ary 方法的,原本方法查找会一直去到最顶层,但你在 Object 上定义了 method_missing,所以会输出你的调试信息,然后才 super 给往上一层,而最顶层发现调用栈有执行 shell 命令的操作(试了下 system,也会出现调试信息),会忽略报错
把代码贴上来啊
为什么好像搞成反色了
接口的后端需要你传 resource_list,用来 insert table,虽然你传了,但可能格式不对吧,总之后端不认,拼接 sql 时没带上 resource_list 这个字段,而该字段是 not null 的,于是返回错误信息告诉你没有 default value 什么的,但它返回的不是 json 而是 html,于是解析出错
好奇为什么要修改 200 多个文件
1.哪里乱序了?
2.改成'python py_test.py "'+value+'" '
试试
没看出你这有必要赋值到 nodes 上
都是把 env 包装一下,但 ActionDispatch::Request 会方便一点不用写 HTTP_
# Converts an HTTP header name to an environment variable name if it is
# not contained within the headers hash.
def env_name(key)
key = key.to_s
if key =~ HTTP_HEADER
key = key.upcase.tr("-", "_")
key = "HTTP_" + key unless CGI_VARIABLES.include?(key)
end
key
end
ENV_METHODS.each do |env|
class_eval <<-METHOD, __FILE__, __LINE__ + 1
def #{env.sub(/^HTTP_/n, '').downcase} # def accept_charset
get_header "#{env}".freeze # get_header "HTTP_ACCEPT_CHARSET".freeze
end # end
METHOD
end
此外 rails 还会 mixin 其它一些便利东西,所以需要一个新的类来代表 request
在其它文本编辑器写好了再贴过去……
跟 rails 的 route 差不多,试着撸一个简陋的:
module Search
def self.ing &blk
Root.new.tap do |r|
r.instance_eval(&blk)
puts r
end
end
def children
@chidlren ||= []
end
def with condition, value
children << With.new(condition, value)
end
def without condition, value
children << Without.new(condition, value)
end
def any_of &blk
a = Any.new
a.instance_eval &blk
children << a
end
def all_of &blk
a = All.new
a.instance_eval &blk
children << a
end
def children_to_s
children.map &:to_s
end
class Root
include Search
def to_s
children.first.to_s
end
end
class Any
include Search
def to_s
'(' + children_to_s.join(' or ') + ')'
end
end
class All
include Search
def to_s
'(' + children_to_s.join(' and ') + ')'
end
end
class With
def initialize cond, v
@cond, @v = cond, v
end
def to_s
"#{@cond} = #{@v}"
end
end
class Without
def initialize cond, v
@cond, @v = cond, v
end
def to_s
"#{@cond} != #{@v}"
end
end
end
Search.ing do
any_of do
with :col1, 1
with :col2, 2
all_of do
with :col3, 3
without :col4, 4
end
end
end
# output
# (col1 = 1 or col2 = 2 or (col3 = 3 and col4 != 4))
namespace 冲突啊,都是 module Bootstrap
看 readme 开头:
Bootstrap 4 ruby gem for Ruby on Rails (Sprockets) and Compass. For Sass versions of Bootstrap 3 and 2 see bootstrap-sass instead.
其实看你要哪个版本的 bootstrap 就好了,不需要两个都加
rails db:rollback 会调用 down,或者 change 中的反义操作(如果有对应的反义操作)
若 up 中 add_column,down 中 remove_column,那么调完 up 再调 down(migrate 然后 rollback),结果就相当于没加过 column
感觉你没跟着做一遍
active_support 有给 Hash 补上一个叫 except 的方法
但是你无法预估前端会传来什么破坏性的参数,所以反选是不健壮的
1、改文件名须有该文件所在目录的 w 权限
2、从你报错信息看,连。和..都读出来了
3、理论上 filename,newfile 需带上目录名"生命"
LZ 似乎没搞懂运行时 self 的指向、类与实例的区别、继承链,这三个问题
用 raise 来调试?
top10 = Post.group(:channel_id).order('count(*) desc').limit(10).count
Channel.find top10.keys
这个特性比较像 java 那套,编译时检查类型,不能按 ruby 运行时的去理解
ON clause 用来定 join condition,WHERE clause 用来定 filter condition,这才是正确的,你为什么要把 filter 写在 ON 里呢
scope :with_cars, -> (**opt) { eager_load(:cars).where(cars: opt) }
使用:
Maker.with_cars company_id: [1,2,3], status: ['ok']
JD 是啥
楼主拿 js 跟 ruby 比语法,输定了……
没有逻辑。叫人学 MEAN 也是先说 js,但讲到 ROR 却不提 ruby,还怪人家黑箱
四个表
Question.has_many :options
Option.belongs_to :question
Option.has_many :users, through :answers
User.has_many :options, througn :answers
其实我觉得现在看上去还可以啦(可能是我功力不足)
main 和 combine 放在一个表里,用 AR 风格的话还要考虑别名的转换,太蛋疼了
追求风格的话应该从表结构、model 结构开始,不然真的很别扭……当然,我不知道你表结构是否真的有必要定成这样,以及改起来是否很大风险……