我一直得到:StudentsController中的NoMethodError
undefined method `id_num=' for #<Array:0x105adcc98>
Run Code Online (Sandbox Code Playgroud)
我很肯定桌面上有一个id_num,它在控制器中出现:
学生管理员:
def student_test
@student = Student.find(params[:id]) if params[:id]
@student ||= Student.new
run_sequence :testize
end
def test_finalize
Student.transaction do
if @student.update_attributes(params[:student]) && @student.test!
x = @student.site_id
y = @student.testing_id
book = Book.find(:all, :conditions => ["location_id = ? AND testing_id = ?", x, y])
room = Room.new(:room_num => 5)
room.save
book.id_num = room.id #error occurs here. Book.new would work. But I need to do a find.
book.save
end
end
Run Code Online (Sandbox Code Playgroud)
这可能看起来有点令人困惑,但因为测试时!在Student模型中调用方法,学生将被分配一个testing_id,在学生被分配一个随机的testing_id值之前,我不能在学生和书之间执行条件.所以这本书必须经过测试后确定!这就是为什么在那里完成发现的原因.
我正在尝试缓存一个昂贵的查询,该查询在Rails 3中的整个站点中的多个请求中重用.
当用户单击表格以查看报告或用户单击以查看地图或用户单击以打印某些内容时,将执行以下查询:
reports.where{(time > my{range.begin}) & (time < my{range.end})}
Run Code Online (Sandbox Code Playgroud)
这是一个昂贵的查询,可以产生数千条记录.我想缓存它,所以在第一次调用它之后,它被存储在缓存中,直到查询中的一个记录被修改(例如更新).
我用这个替换我的查询:
Rails.cache.fetch('time_reports') { reports.where{(time > my{range.begin}) & (time < my{range.end})} }
Run Code Online (Sandbox Code Playgroud)
但它引发了一个例外:
TypeError (can't dump anonymous class #<Module:0x007f8f92fbd2f8>):
Run Code Online (Sandbox Code Playgroud)
作为问题的一部分,我想知道使用Rails.cache.fetch是否还要求我在config/environments/production.rb中添加以下内容:
config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com" //obviously I would use my ip
Run Code Online (Sandbox Code Playgroud) 我有三个哈希:
db_headers = {"1"=>"first_name", "2"=>"last_name"}
csv_headers = {"1"=>"First Name", "2"=>"Last Name"}
csv_records = {"0"=>{"id"=>"11", "first_name"=>"first_0", "Last Name"=>"last_0", "created_at"=>"2014-08-12 17:02:28 UTC", "updated_at"=>"2014-08-12 17:02:28 UTC"}, "1"=>{"id"=>"12", "first_name"=>"first_1", "Last Name"=>"last_1", "created_at"=>"2014-08-12 17:02:28 UTC", "updated_at"=>"2014-08-12 17:02:28 UTC"}}
Run Code Online (Sandbox Code Playgroud)
db_headers和csv_headers由其键匹配.例如,它们的键"2"值分别包含"last_name"和"Last Name".我的目标是在密钥相同的db_headers和csv_headers之间的值不同的地方,然后我需要将csv_records中的密钥与db_headers的值交换.因此,例如,csv_records键将从"Last Name"更改为"last_name",因为键"2"处的db_headers和csv_headers值不同.
这就是我想出的:
csv_records.each do |record_key,record_value|
csv_headers.each do |csv_key,csv_value|
if record_value.has_key? csv_value
db_headers.each do |db_key, db_value|
if csv_key == db_key
csv_records[db_value] = csv_records.delete csv_value
break
end
end
break
end
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是它失败了
RuntimeError: can't add a new key into hash during iteration
from (irb):12:in `[]='
from …Run Code Online (Sandbox Code Playgroud) 给定此方法调用:
public class MainClass {
public static void main(String[] args) {
System.out.println(fib(3));
}
private static int fib(int i) {
System.out.println("Into fib with i = " + i);
if (i < 2) {
System.out.println("We got here");
return i;
}
return fib(i-1) + fib(i-2);
}
}
Run Code Online (Sandbox Code Playgroud)
我期望:
* fib(i-1) to return 2
* fib(i-2) to return 1
* return 2 + 1 to return 3
Run Code Online (Sandbox Code Playgroud)
结果:
2
Run Code Online (Sandbox Code Playgroud)
这是控制台的输出:
Into fib with i = 3
Into fib with i = 2
Into fib …Run Code Online (Sandbox Code Playgroud)