来自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 ......我的整个想法有多糟糕?