2011-03-27 64 views
0

我一直在使用Rails 3.0.5和Ruby 1.9.2,并且我注意到一个新记录不会被保存或不能立即使用。Rails 3保存记录问题

例如

def create  
    @some_record = Pool.new(params[:pool]) 
     @some_record.users.push(current_user) 
    if params[:commit] == "Add More"   
     @some_record.save   
     @some_record.do_something 
    elsif params[:commit] == "Save" 
     do_something_else(params) 
    elsif params[:commit] == 'Cancel' 
     redirect_to user_url(current_user) 
    end  
redirect_to some_other_url(current_user) 
end 

所以,当我保存记录并调用some_record.do_something保存对象无法提供即时的。 current_user.some_records不包含新添加的记录,但current_user.some_records.all显示新保存的记录。但是在控制台上,我可以用current_user.some_records查看新创建的记录。

我敢肯定,我遗漏了Rails 3的一些基础知识。我也尝试过与current_user.some_records.build(params[:some_record]一样的尝试,并且遇到同样的问题。 Rails 3是否立即保存对象,或者是否存在某种延迟写入/保存,因为Rails 3.0.3不会出现同样的问题。

另外我没有使用像authlogic/devise这样的身份验证插件,我只是将current_user对象保存到会话中。我不确定我做错了什么。我很感激任何帮助吗?

它也有不少一对多some_record和用户

+0

对不起,我的错误很大。保存在推送到关联数组后被调用。 – Sid 2011-03-27 10:40:48

回答

1
current_user.some_records 

不包含新添加的记录,因为你没有指定@some_record.users.push(current_user)后保存操作之间的关联。 您只需在作业后添加.save即可使用。

1

模型结构是不是从你的问题不清楚,但我们认为current_userbelongs_tosome_records 要强制数据库中读取试试这个:

current_user.some_records(true) 

默认情况下forcereload = false,重写这个你应该通过true

+0

我不明白。你的意思是数据库读取不是默认设置,需要明确调用。这种设置的优点/用途是什么。 – Sid 2011-03-27 10:48:56

+0

不开发模式隐式地重新加载所有内容。 – Sid 2011-03-27 10:50:11

+0

“如果已从数据库中检索到此对象的关联对象,则会返回缓存的版本” - 从这里http://guides.rubyonrails.org/association_basics.html – megas 2011-03-27 11:05:39