1

次のような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 で機能しますが、他のユーザーのステータスも削除されます: 間違っています!
  • ステータスを変更: 参加中から不参加に変更しても、何も変わりません: 間違っています!

どんな助けでも大歓迎です!

最後に、繰り返しの隠しフィールドを使用してチェックボックスを確認/拒否ボタンに減らしたいのですが、おそらくもっと簡単な方法がありますか?

4

0 に答える 0