0

我正在尝试在导入列表上设置外键。我的想法是创建一个 before_save 回调来使用会话变量更新外键。但是,我的理解是,您不能轻易或不应该从模型中访问会话变量。如果是这样,我还有什么其他选择。我的代码如下:

在模型中:

class Contact < ActiveRecord::Base
   attr_accessible :first_name, :last_name, :email, :mobile, :restaurant _id
   belongs_to :restaurant

    before_save :add_restaurant

    def add_restaurant
     contact = Contact.find_by_restaurant_id(session[:current_restaurant])
     contact.restaurant_id = (session[:current_restaurant])
    end

  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
    contact = find_by_first_name_and_last_name(row["first_name"], row["last_name"]) || new
    contact.attributes = row.to_hash.slice(*accessible_attributes)
    contact.save!
    end
  end
end

在控制器中:

def import
    Contact.import(params[:file])
    redirect_to contacts_path, notice: "List imported"
end
4

1 回答 1

0

您可以先找到餐厅,然后将联系人添加到餐厅联系人中。

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    contact = find_by_first_name_and_last_name(row["first_name"], row["last_name"]) || new
    contact.attributes = row.to_hash.slice(*accessible_attributes)
    restaurant = Restaurant.find_by_id(r_id)    # Get the restaurant here
    restaurant.contacts << contact              # This will do a save immediately
  end
end
于 2013-01-30T23:33:03.743 回答