私はレールが初めてであるので、レールでこれをやっていないのであれば、正しい方向に向いてください。私は状態のリストのための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でキャンペーンセッターメソッドに関連するすべてのファイリングを削除
:
は私がすることによってこれを達成することができます。
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
エンド