19

設定しようとしているフォームがあります...ユーザーは多くの投稿を持つことができ、各投稿には多くの人がそれを見ることができます。

ウォッチモデルは、さまざまなタイプのモデルに適用できるように、「ウォッチ可能」として多形的に設定されています。属性/フィールドとして、user_id、watchable_id、watchable_type、およびタイムスタンプがあります。

これは、人々が投稿にコメントしたときに、その投稿を見ているユーザーがそれについての電子メールを受け取ることができるようにするためです。

私がやろうとしているのは、各投稿にタグ付けできるユーザーのリストをユーザーに表示することですが、これは問題ありません。これは私が今使っているものです

http://pastie.org/940421

<% 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 => '&nbsp;', :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}
4

4 に答える 4

26

同じ問題を抱えている他の人のために:

<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
于 2011-05-18T20:59:00.927 に答える
7

複数のチェックボックスの場合、次のようになります。

<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
于 2016-09-05T11:31:13.920 に答える
3

:some_inputの値を反映するためにチェックボックスの状態が必要な場合

<%= form.input :some_input, :as => :boolean, :input_html => { :checked => :some_input? } %>

あなたのモデルで..

def some_input?
  self.some_input ? true : false
end
于 2012-12-08T02:22:24.337 に答える
2

フォームをレンダリングする前に、コントローラーでブール属性の値を「true」に設定します。これにより、Formtasticのデフォルトのチェックボックスが「チェック済み」になります。

于 2010-12-11T20:57:56.653 に答える