我是 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 中删除状态时,我需要删除状态。
我可以通过以下方式做到这一点:
在 state_tokens setter 方法中删除与活动相关的所有文件,然后创建新文件。
在 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
结尾