2012-01-21 7 views
2

私はhas_manyを実装しようとしています:Rails 3(Formtasticを使用)でjoinを使用していて、ちょっと固まってしまいました。Rails 3 has_many:throughフォームのドロップダウンメニュー?

:それは従業員が選択されることを可能にするビュー

class Project < ActiveRecord::Base 
has_many :employees, :through => :teams 
has_many :teams 

class Employee < ActiveRecord::Base 
has_many :projects, :through => :teams 
has_many :teams 

class Team < ActiveRecord::Base 
belongs_to :project 
belongs_to :employee 

そして、この行は私のプロジェクトで複数選択ボックスを与える:

モデルを次のように私は、セットアップのモデルを持っています表示:

<%= f.input :employees, :as => :select %> 

はこれまでのところ、これは仕事を取得しますが、私はしたいのですがそれ自体でありますそれぞれの従業員の名前を選択し、プロジェクト内での役割を選択します。私は...そこに私を得るために、フォームのコードを把握することはできません


EDIT:示唆したように

が、私はRailscast 197: Nested Model Forms作業からコードを得ているし、それが途中です。これは私がビューに持っているものです。

<%= f.semantic_fields_for :employees do |builder| %> 
    <%= render 'employee_fields', :f => builder %> 
<% end %> 
<%= link_to_add_fields "add employee", f, :employees %> 

と「employee_fields」部分:

<p class="fields"> 
    <%= f.input :name, :as => :select, :collection => Employee.find(:all) %> 
    <%= f.hidden_field :_destroy %> 
    <%= link_to_remove_fields "remove", f %> 
</p> 

しかし、今、これは新しい従業員ではなく、新しいチーム(プロジェクトの従業員のレコードを結合する)を作成しますだから私はhas_many :throughではなくhas_manyとして行動していると思う。上記の:name入力がproject[employee_ids][]にレコードを追加するようにこれを編集するにはどうすればよいですか?

+0

railscasts.comのネストされたモデルフォームの番号196と197のエピソードはいくつかのアイデアを提供するかもしれません。それらは特にhas_many:throughにはありませんが、親オブジェクトに対して複数の子フィールドを持つことができます。 – nmott

+0

私はちょうどそれらの最後の夜を見ました!私はその機能が働いていますが、私はまだhas_many:through部分に固執しています。 – ellawren

答えて

1

ああ私の神様、私はついにこの作品を手に入れました。ここでは、関連するコードです、マイナスビットは、フォームが動的にフィールドを追加し、削除するために追加しました:

<div class="input"> 
    <%= f.collection_select(:employee_id, Employee.all, :id, :name, :include_blank => true) %> 
</div> 
_team_fields.html.erb

_form.html.erb

<%= semantic_form_for @project do |f| %> 
    . 
    . 
    <%= f.semantic_fields_for :teams do |builder| %> 
     <input id="project_teams_none" name="team[employee_ids][]" type="hidden" value="" /> 
     <%= render 'team_fields', :f => builder %> 
    <% end %> 

キーは手動で<input id="project_teams_none" name="team[employee_ids][]" type="hidden" value="" />行を追加していました。何らかの理由でこれがフォームの一部として生成されなかったからです。これは実際に物事を更新するためのフォームを得て、その後、ちょうどemployeesではなく、結合モデル(team)を参照して入れ子になったフォームを作成して、更新が適切な場所に行かなければなりませんでした。

今はとてもシンプルに見えます!

関連する問題