設定しようとしているフォームがあります...ユーザーは多くの投稿を持つことができ、各投稿には多くの人がそれを見ることができます。
ウォッチモデルは、さまざまなタイプのモデルに適用できるように、「ウォッチ可能」として多形的に設定されています。属性/フィールドとして、user_id、watchable_id、watchable_type、およびタイムスタンプがあります。
これは、人々が投稿にコメントしたときに、その投稿を見ているユーザーがそれについての電子メールを受け取ることができるようにするためです。
私がやろうとしているのは、各投稿にタグ付けできるユーザーのリストをユーザーに表示することですが、これは問題ありません。これは私が今使っているものです
<% semantic_form_for @update do |f| %>
<%= f.input :subject, :input_html => { :class => 'short' } %>
<%= f.input :site, :include_blank => false, :input_html => { :class => 'short' } %>
<label>Tag Users (they will get notified of this update)</label>
<%= f.input :user, :as => :check_boxes, :label => ' ', :wrapper_html => { :class => "radiolist clearfix" }, :for => :watch, :name => "Watch" %>
<%= f.input :note, :label => 'Update'%>
<% f.buttons do %>
<%= f.commit_button :button_html => { :class => 'submit' } %>
<% end %>
<% end %>
これに伴う問題は、更新/投稿を編集するときに...すべてのチェックボックスが事前にチェックされていることです...現在投稿を視聴しているユーザーのみを事前にチェックしたいのです。
さらに明確にするために...これは私が今やりたいことをやらせるためのハッキーな方法です
<ul class="radiolist clearfix">
<% @users.each do |user| %>
<li>
<%= check_box_tag 'user_ids[]', user.id, @watches.include?(user.id) ? true : false -%>
<%= h user.name -%>
</li>
<% end %>
</ul>
ここで、@watchesは単なるユーザーIDの配列です
@watches = @update.watches.map{|watcher| watcher.user_id}