在rails中查找或创建方法不能按预期工作

时间:2016-02-27 20:53:05

标签: ruby-on-rails

所以我在我的佣金任务中有这个

  Event.find_or_create_by(time: row[9], date: row[10], event_type: word1,  eventimage: row[4], eventname: eventname, eventvenuename: location, event: eventname, eventlink1: eventlink1, eventlink2: eventlink2)

现在,我有这个加载格式csv,目前,有时候会填充事件,一周后会有一个eventlink2可用于同一个链接。

如果事件已经创建,我怎样才能填充eventlink2? (目前无效)

萨姆

2 个答案:

答案 0 :(得分:0)

试试这个:

Model.where(thing_to_look_up_by: x).first_or_create(another_thing: y, more_attributes: z)

如果它没有找到它将在创建中使用它的位置。

答案 1 :(得分:0)

为此,我会使用:find_or_initialize_by。作为params,它需要你想要找到的任何属性。下面我的例子通过eventlink1属性找到。确保您找到的任何属性在所有事件中都是唯一的。

event = Event.find_or_initialize_by(eventlink1: link_1) do |e|
  e.time = row[9],
  e.date = row[10],
  e.event_type = word1,
  e.eventimage = row[4],
  e.eventname = eventname,
  e.eventvenuename = location,
  e.eventlink2 = eventlink2
end
event.save!

我还注意到在上面的参数中你有一个:event属性分配给eventname变量。希望这是一个错字,事件模型不应该有'event'属性。此外,(在您的上述参数中)'event'和'eventname'属性都设置为相同的变量(eventname)。这是错误的(无论'event'属性是否真的存在或被错误地包含在另一个属性中。没有理由有两个列(event,eventname)只存储事件的名称。