0

私はレールに慣れていないので、レールの方法でこれを行っていない場合は、正しい方向に向けてください。状態のリストに 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 から状態を削除すると、状態を削除する必要があります。

私はこれを達成することができます:

  1. state_tokens セッター メソッドでキャンペーンに関連するすべてのファイリングを削除してから、新しいものを作成します。

  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

終わり

4

1 に答える 1

0

オプション 1 を使用して、既存のレコードを削除/置換することにしました。もっと良い方法があると思われる場合はお知らせください。

于 2012-04-19T00:35:04.467 に答える