次のようなhabtm モデルがあります。
class Recurrence < ActiveRecord::Base
has_many :participations, :include => :user
has_many :users, :through => :participations
accepts_nested_attributes_for :participations
attr_accessible :scheduled_to, :user_id, :user_ids
end
class Participation < ActiveRecord::Base
belongs_to :recurrence
belongs_to :user
attr_accessible :recurrence_id, :user_id
end
class User < ActiveRecord::Base
has_many :participations, :dependent => :delete_all
has_many :recurrences, :through => :participations
accepts_nested_attributes_for :participations
attr_accessible :name, :email, :phone, :recurrence_ids
end
recurrences_controller の標準アクション (index、show、new、edit、create、update、destroy) を使用します。
単一の繰り返し (/recurrences/10 -> show-action) のビューで、ユーザーの参加を作成/更新しようとします。上記のビューで次のようなことをすると:
<%= form_for @recurrence do |f| %>
<div class="checkbox">
<% for user in User.find(:all) %>
<div>
<%= check_box_tag "recurrence[user_ids][]", user.id, @recurrence.users.include?(user) %>
<%= user.name %>
</div>
<% end %>
</div>
<div class="actions">
<%= f.submit "Update", :class => 'btn btn-mini btn-primary' %>
</div>
<% end %>
1 人以上のユーザーの参加を追加または削除できます。
しかし、私はそれをするのが好きです-たった1人のユーザー、つまりcurrent_userのために!以下のソースで試しました。
<%= form_for(@recurrence) do %>
<%= check_box_tag "recurrence[user_id]", current_user.id,
@recurrence.users.include?(current_user) %>
<%= current_user.name %>
<%= submit_tag "Update" %>
<% end %>
動作していない、より詳細
- 変更されていないステータスの更新: 参加していない、何もしない: 正解です。
- ステータスの変更: 非参加から参加へ、current_user で機能しますが、他のユーザーのステータスも削除されます: 間違っています!
- ステータスを変更: 参加中から不参加に変更しても、何も変わりません: 間違っています!
どんな助けでも大歓迎です!
最後に、繰り返しの隠しフィールドを使用してチェックボックスを確認/拒否ボタンに減らしたいのですが、おそらくもっと簡単な方法がありますか?