Location.rb
before_save :get_locations
def get_locations
Location.find_or_create_by(name: [:name])
end
这是我的控制者;在这里运行find_or_create时工作正常。
Locations_controller.rb
def create
@location = Location.new(location_params)
# == worked previously == #
# @location = Location.find_or_create_by(name: location_params[:name])
# == worked previously == #
respond_to do |format|
...
end
end
帮助会很棒!
答案 0 :(得分:0)
首先,我会尝试猜测,你想在那里做什么。考虑到您给我们的内容,您试图阻止创建具有相同名称的多个位置,如果用户尝试这样做,请找到已创建的位置而不是创建新位置。
如果这是真的,那么就要提到一些事情:
validates_uniqueness_of :name
调用,因此永远不会有2个具有相同名称的位置。find_or_initialize_by(name:location_params[:name])
调用(如果您想在之后使用找到的记录执行某些操作)或find_or_create_by(name:location_params[:name])
(立即创建它)。