使用formtastic从多个select in rails中创建新的关联值

时间:2013-11-29 00:42:59

标签: jquery ruby-on-rails formtastic has-and-belongs-to-many

来自stackoverflow的朋友们。

我正在使用rails开发我的网站,我有Viagens(Trips)和Destinos(Destinations),如下所示:

class Viagem < ActiveRecord::Base
has_and_belongs_to_many :destinos

class Destinos < ActiveRecord::Base
has_and_belongs_to_many :viagens

好的,我可以在我的视图中使用以下FORMTASTIC代码创建Viagem和多个Destinos等。

f.input :destinos, :as => :select, :input_html => {:multiple => 'multiple'}

但我希望能够从New Viagem View创建新的Destinos。我的(失败)解决方案是使用Jquery将选项添加到Select输入中。选项值输出将是“id:name”,以便我可以在控制器中拆分。我无法用formtastic创建输入,所以我改为常规rails:

<%= f.select(:destinos, @destinos.collect{ |c| [c.nome, "#{c.id}:#{c.nome}"] }, { :selected => @viagem.destino_ids }, { multiple: true, size: 5}) %> 

这是我的控制器:

def create 
params[:viagem][:destino_ids] = []
if params[:viagem][:destinos]
  a = params[:viagem][:destinos]
  a.each do |k|
    k.split(':')
    params[:viagem][:destino_ids] << Destino.find_or_create_by_nome(k[1]).id
  end
end
params[:viagem].delete :destinos     
@viagem = @agencia.viagens.build(params[:viagem])

if @viagem && @viagem.save
  redirect_to edit_agencias_viagem_path(@viagem), :notice => "A viagem foi salva!"
else
  @destinos = Destino.all 
  render :new
end    
end

def edit
@viagem = Viagem.find_by_id(params[:id])
@destinos = Destino.all
@destinos_viagem = @viagem.destino_idss
end

我的想法是在编辑时保存新的Destinos并显示正确的Viagem.destinos ......我的整个想法有多糟糕?

0 个答案:

没有答案