【发布时间】:2014-07-30 12:40:57
【问题描述】:
- 所以我希望将 find_or_create 函数从我的控制器移动到我的模型中。基本上,如果该位置已经存在,则选择该位置,如果不存在则创建一个新位置。通过阅读,我认为之前的保存功能应该可以做到,但我不确定正确的语法,而且似乎在任何地方都找不到很多示例。
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
帮助会很棒!
【问题讨论】:
-
不清楚您要达到的目标。你为什么把这个逻辑转移到一个模型中——如果这些模型彼此不相关,你就不应该这样做。此外,您的
get_locations方法绝对什么也不做,除了浪费时间进行不需要的 sql 查询以获取稍后将被丢弃的记录。请更新您的问题,详细说明您想要实现的目标。 -
在模型中你已经创建了无限循环,因为
create触发before_save过滤器。 -
您是否正在寻找控制器的
before_action回调? -
嗨@BroiSatse - Aplogies,模型是相关的(一篇文章有很多位置)。我希望在保存之前捕获该位置并检查它是否存在。如果是,请引用它,如果不是,请创建它。
-
@maringan - 不确定保存之前是否是正确的回调。接受建议。这对我来说最有意义。
标签: ruby-on-rails ruby model-view-controller ruby-on-rails-4 model