1

ユーザーの配列を使用してフォームにチェックボックスを動的に作成したい。配列に保存する必要がある値 (param[:project][:members]) には、クリックされたすべてのチェック ボックスの user_id が含まれている必要があります。

私はたくさん探し回っていますが、探しているものをまだ見つけていません。

チェックボックスにはどのようなコードを記述すればよいですか?

ビュー内のフォーム:

<%= form_for @project do |f| %>
    <div class="text_field">
        <%= f.label :title%>
        <%= f.text_field :title%>
    </div>
    <div class="text_field">
        <%= f.label :description%>
        <%= f.text_field :description%>
    </div>
    <div class="dropdown">
        <%= f.label :start_date%>
        <%= f.date_select :start_date %>
    </div>
    <div class="dropdown">
        <%= f.label :end_date%>
        <%= f.date_select :end_date %>
    </div>
    <div class="checkboxes">
        <% @users.each do |user| %>
            // <%= check_box_tag "users[]", user.id %> <--- ???
        <% end %>
    </div>
    <div class="submit">
        <%= f.submit "Spara" %>
    </div>
<% end %>

コントローラ:

def new
  @project = Project.new
  @users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
end

レンダリングされたhtml:

[ ] Jules Smith    // user_id: 1
[X] Carl Jones     // user_id: 2 
[X] Lily Stevens   // user_id: 3

// param[:project][:members] // <-- 2, 3 (user_id's)
4

1 に答える 1

2
<% @users.each do |user| %>
    <%= check_box_tag "project[members][]", user.id, checked_or_not, :id => "user_#{user.id}" %> 
    <%= label_tag "user_#{user.id}", user.name_login_or_smth_else %>
<% end %>

checked_or_notuser.id がメンバー配列に既にあることを示すコードに置き換えます。たとえばhas_and_belongs_to_many、プロジェクトとユーザーの間の関係を次のように設定するとします。

class Project < ActiveRecord::Base
    has_and_belongs_to_many :members, :class_name => 'User'
end

フォームは次のようになります。

<% @users.each do |user| %>
    <%= check_box_tag "project[member_ids][]", user.id, @project.member_ids.include?(user.id), :id => "user_#{user.id}" %> 
    <%= label_tag "user_#{user.id}", user.name_login_or_smth_else %>
<% end %>

アップデート:

check_box_tag の 2 番目の引数user.idはチェックボックスの値で、3 番目@project.member_ids.include?(user.id)はチェックボックスがチェックされているかどうかです。詳細については、こちらをご覧ください。

has_and_belongs_to_many はcollection_ids、関連するすべてのオブジェクトの ID の配列を返すメソッドを追加します。アソシエーションに名前を付けたいので、オプションmembersでアソシエーションを設定していclass_nameます:

has_and_belongs_to_many :members, :class_name => 'User'

collection_idsという方法になりますmember_ids。その@project.member_ids.include?(user.id)ため、メンバーにすでにユーザーが含まれている場合はチェックボックスをオンにし、それ以外の場合はオフにします。

別の質問から、次のように関連付けを設定すると想定できます。

has_and_belongs_to_many :users

user_ids次に、使用する必要があるメソッドとフォームを追加します

check_box_tag "project[user_ids][]", user.id, @project.user_ids.include?(user.id)

詳細はこちらをご覧ください。

于 2013-02-10T10:23:42.137 に答える