0

我是 Rails 新手,所以如果我不以 Rails 方式执行此操作,请指出正确的方向。我将 carmen gem 用于状态列表,它们没有存储在数据库中。

我遵循了使用 tokenInput 插件的这个rails cast,但是我的情况有点不同,因为状态 ID 没有存储在数据库中,而且我只有一个 has_many,而不是一个 has_many through 关系。

tokenInput 期望 JSON 像[{"id": "id_here", "name":"name_val"}]. 由于我在数据库中没有状态 ID,因此我通过将状态代码映射到 id 键并将状态名称映射到名称键(即[{"id": "NC", "name":"North Carolina"}] )在文件控制器中手动创建 JSON 对象

添加状态时一切正常,但是当用户从编辑页面上的 tokenInput 中删除状态时,我需要删除状态。

我可以通过以下方式做到这一点:

  1. 在 state_tokens setter 方法中删除与活动相关的所有文件,然后创建新文件。

  2. 在 tokenInput onDelete 回调中添加代码以调用归档控制器销毁方法。

您将实施哪个选项,还有其他我没有想到的方法吗?

模型:

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 回答