Ruby on rails Rails如何通过回调模型中的另一个attr查找id?
我希望创建一个回调,如果找到另一个模型的id属性,则在其中更新一个对象 在这种情况下,如果找到订单id,则更新Odata模型 有人知道如何根据另一个模型id属性查找对象吗Ruby on rails Rails如何通过回调模型中的另一个attr查找id?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我希望创建一个回调,如果找到另一个模型的id属性,则在其中更新一个对象 在这种情况下,如果找到订单id,则更新Odata模型 有人知道如何根据另一个模型id属性查找对象吗 class Order < ActiveRecord::Base after_update :update_odata def update_odata order = Order.find_by_id(attributes['id']) od = Odata.find_by_
class Order < ActiveRecord::Base
after_update :update_odata
def update_odata
order = Order.find_by_id(attributes['id'])
od = Odata.find_by_id(attributes['order_id'])
od.shipping_cost = order.shipping_cost
od.shipping_method = order.shipping_method
od.status = order.status
od.feedback_id = order.feedback_id
od.track_number = order.track_number
od.seller_name = order.seller_name
od.buyer_name = order.buyer_name
od.save
end
end
类顺序
一般来说,在求助于他人帮助解释StackOverflow之前,您应该至少努力学习您正在使用的工具
为了回答您的问题,find(1)
实际上是find\u by(id:1)
的快捷方式。因此,如果您想按客户id查找订单,您可以这样做:order.find\u by(customer\u id:42)
或者,如果您试图根据顺序
(根据Rails应用程序的构建方式和您示例中不寻常的属性
做一些假设)来确定这一点:
在这种情况下,您可能只需要使用关系:
class Order < ApplicationRecord
has_one :odata
end
class Odata < ApplicationRecord
belongs_to :order
end
# controller:
order = Order.find params[:id]
od = order.odata
类顺序
如果你想做你上面的事情,这可能是一条不好的道路,你可能会想做这样的事情:
class Order < ApplicationRecord
has_one :odata
def attributes_for_odata
%w{ shipping_cost shipping_method status feedback_id track_number seller_name buyer_name }
end
def update_order_data
odata.update attributes.slice(*attributes_for_odata)
end
end
类顺序
sorry没有那么简单@coreyward更具体地说,find(x)
相当于find\u by!(id:x)
因为find
在查找失败时会抛出异常。@实际上,如果您的问题是问我认为它在说什么。首先,查找在模型中,而不是在控制器上,第二,我要找的不是具体的id@bookaka你真的需要更好地解释,因为你说的话对我来说毫无意义。试着描述你想要发生的事情,在你的问题中通过编辑来澄清它。作为一个提示,如果你需要指导或辅导,可以尝试诸如、或之类的服务。
class Order < ApplicationRecord
has_one :odata
def attributes_for_odata
%w{ shipping_cost shipping_method status feedback_id track_number seller_name buyer_name }
end
def update_order_data
odata.update attributes.slice(*attributes_for_odata)
end
end