2012-04-11 9 views
0

私はレールが初めてであるので、レールでこれをやっていないのであれば、正しい方向に向いてください。私は状態のリストのためのcarmenの宝石を使用していて、彼らはDBに格納されていません。DBに格納されていないhas_manyを使用したjquery tokenInput

私はtokenInputプラグインを使用してこのrails castを追跡しましたが、状態IDがDBに格納されておらず、has_manyだけの関係を持っているため、状況が少し異なります。

tokenInputは、[{"id": "id_here", "name":"name_val"}]のようなJSONを想定しています。 DBに状態IDがないので、IDコードに状態コードをマッピングし、状態キーを名前キー(つまり[{"id": "NC", "name":"North Carolina"}])にマッピングすることによって、手作業でJSONオブジェクトを手動で作成します。

すべて動作します私が状態を追加しているときには素晴らしいですが、ユーザーが編集ページのtokenInputから状態を削除するときに状態を削除する必要があります。その後、ちょうど新しいものを作成し、state_tokensでキャンペーンセッターメソッドに関連するすべてのファイリングを削除

  1. は私がすることによってこれを達成することができます。

  2. tokenInput onDeleteコールバックにコードを追加して、ファイリングコントローラのdestroyメソッドを呼び出します。

あなたはどのオプションを実装しますか?これを行う別の方法はありますか?

モデル:

class Campaign < ActiveRecord::Base 

    has_many :filings 
    attr_accessible :state_tokens 

    def state_tokens 
    self.filings.map {|r| {:id => r.state, :name => Carmen::Country.coded('US').subregions.coded(r.state).name}}.to_json 
    end 

    def state_tokens=(ids) 
    state_codes = ids.split(",") 
    state_codes.each do |s| 
     Filing.find_or_create_by_campaign_id_and_state(self.id, s) 
    end 
    end 

コントローラー:

class FilingsController < ApplicationController 
    def index 
    @filtered = Carmen::Country.coded('US').subregions.select {|r| r.name.downcase.include? "#{params[:q]}".downcase} 
    respond_to do |format| 
     format.html 
     format.json { render :json => @filtered.map {|r| {:id => r.code, :name => r.name}}} 
    end 
    end 

エンド

答えて

0

私はオプション1で行くと、ちょうど削除/既存のレコードを変更することを決定しました。もっと良い方法があると思ったら教えてください。

関連する問題