2013-02-10 3 views
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) 

답변

1
<% @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 %> 
,745,

checked_or_not을 user.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 %> 

UPDATE :

check_box_tag user.id의 두 번째 인수는 체크 박스의 값이, 세 번째 @project.member_ids.include?(user.id)은 체크 박스가 선택되어 있는지 여부입니다. 자세한 내용은 here을 참조하십시오.

has_and_belongs_to_many는 연결된 모든 개체 ID의 배열을 반환하는 collection_ids 메서드를 추가합니다. 우리 협회 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 방법을 추가하고 형태 당신은 당신은 자세한 내용은 here을 읽을 수

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

을 사용해야합니다 다른 질문에서

이 같은 당신이 설정 협회 있다고 가정 할 수 있습니다 .

+0

답변 해 주셔서 감사합니다. 그러나 코드를 시도 할 때 다음 오류가 발생합니다 : 정의되지 않은 메서드 'member_ids'for ... 왜 그 이유를 알고 있습니까? 어쩌면 "user.id, @ project.member_ids.include? (user.id)"라고 설명해 주시겠습니까? – holyredbeard

+0

has_and_belongs_to_many 연관을 설정하고 올바르게 작동하는지 확인 했습니까? 나는 나의 대답을 업데이트했다. –

관련 문제