私はレールに慣れていないので、レールの方法でこれを行っていない場合は、正しい方向に向けてください。状態のリストに carmen gem を使用していますが、それらは DB に保存されていません。
tokenInput プラグインを使用するためにこのRails キャストに従いましたが、状態 ID が DB に保存されておらず、関係を介した has_many ではなく has_many しかないため、状況は少し異なります。
tokenInput は のような JSON を想定しています[{"id": "id_here", "name":"name_val"}]
。DB に状態 ID がないため、状態コードを ID キーにマッピングし、状態名を名前キーにマッピングして、ファイリング コントローラーに JSON オブジェクトを手動で作成します (つまり[{"id": "NC", "name":"North Carolina"}]
) 。
状態を追加するときはすべてうまく機能しますが、ユーザーが編集ページの 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
終わり