问题:find_or_initialize 返回的对象没有保存到数据库 原因:find_or_initialize 只是初始化了一个对象,并没有自动保存到数据库。需要调用 save 方法来保存对象。 解决方法: 代码语言:txt 复制 @user = User.find_or_initialize_by(email: params[:email]) if @user.persi
FIND_OR_INITIALIZE_BY方法的工作方式与FIND_OR_CREATE_BY相同,但它将调用new而不是create。这意味着...
在仅由find_or_initialize_by初始化的新记录上,new_record?返回true。例如,你可以写:...
而且可以看出,我们还可以调用find_by_columnName、find_or_initialize_by_columnName、find_or_create_by_columnName等动态方法。 补充几点: 1. 动态查询支持nil, array 以及range作为参数 比如要查询上海或者北京, 年龄在18~38之间的用户,就可以这样用: User.find_all_by_city_and_age(['Shanghai','Beijing']...
通过链接find_or_initialize_by和update,这可以以一种简单的方式实现,避免了(根据我的经验,经常)...
local_object = find_or_initialize_by(remote_unique_field_name => remote_unique_field) local_to_remote_fields_map = importing_fields_map[:local_to_remote_fields_map] # 逐一设置本地对象需要对接的各个属性 local_to_remote_fields_map.keys.each do |attribute| ...
cart = Cart.find_or_initialize_by_user_id(user.id) cart.items << new_item cart.save 1. 2. 3. SQL and ActiveRecord 在AcriveRecord中使用SQL 用model的where方法可以实现sql语句的where子句。 pos = Order.where("name = 'virus' and emal = 'sf@123.com'") ...
# Returns one recordPerson.find_by_name(name)Person.find_last_by_name(name)Person.find_or_create_by_name(name)Person.find_or_initialize_by_name(name) # Returns a list of recordsPerson.find_all_by_name(name) # Add a bang to make it raise an exceptionPerson.find_by_name!(name) ...
order = Order.find_by_name_and_password(name,pw) 和order = Order.where(:name => name, :password => pw).first 是一样的效果。有些情况下,你想要确保有model,如果在数据库中不存在,就创建一个,动态的finders就可以实现这个需求。find_or_initialize_by_或者find_or_create_by_可以实现没有满足条件...
Role.find_or_create_by(name: role) 请参考Rails4指南修改其它的,以兼容未来: find_all_by_... 改为: where(...). find_last_by_... 改为:where(...).last. scoped_by_... 改为: where(...). find_or_initialize_by_... 改为:where(...).first_or_initialize. ...