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 に答える