2010-04-29 40 views
14

Tôi có biểu mẫu tôi đang cố gắng thiết lập ... Người dùng có thể có nhiều bài đăng và mỗi bài đăng có thể có nhiều người xem bài đăng đó.Cách kiểm tra trước các hộp kiểm trong formtastic

Mô hình Đồng hồ được thiết lập đa hình là 'có thể xem' để có thể áp dụng cho các loại mô hình khác nhau. Nó có một user_id, watchable_id, watchable_type và timestamps dưới dạng thuộc tính/trường.

Đây là cách để khi mọi người nhận xét về bài đăng, người dùng xem bài đăng có thể nhận được email về bài đăng đó.

Những gì tôi đang cố gắng làm là hiển thị cho người dùng danh sách người dùng mà họ có thể gắn thẻ trên mỗi bài đăng, điều này không thành vấn đề. Đây là những gì tôi đang sử dụng ngay bây giờ

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 %> 

Vấn đề với điều này, đó là khi bạn đi đến chỉnh sửa cập nhật/bài ... tất cả các hộp kiểm được prechecked ... Tôi muốn nó chỉ được kiểm tra trước những người dùng hiện đang xem bài đăng.

Tiếp tục làm rõ ... đây là cách hacky tôi nhận được nó để làm những gì tôi muốn ngay bây giờ

<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> 

nơi @watches chỉ là một mảng của id người dùng

@watches = @update.watches.map{|watcher| watcher.user_id} 
+2

pastie.org không hoạt động. Bạn có thể đặt mã ở một nơi khác không? – kikito

+0

đã hoàn tất. Cảm ơn bạn đã xem nó. – concept47

Trả lời

18

Đối với bất cứ ai khác có cùng một vấn đề:

<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %> 
+0

Điều này cũng hoạt động tốt với ': as =>: check_boxes' nếu bạn muốn tất cả các hộp kiểm tra được kiểm tra – oskarae

+3

Cũng có thể nói: input_html => {: checked => true} – TLK

2

Đặt giá trị của thuộc tính boolean thành 'true' trong bộ điều khiển trước khi kết xuất biểu mẫu. Điều đó sẽ làm cho Formtastic mặc định hộp kiểm để 'kiểm tra'.

2

Nếu bạn cần trạng thái của hộp kiểm để phản ánh giá trị của: some_input

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

Trong mô hình của bạn ..

def some_input? 
    self.some_input ? true : false 
end 
+0

Điều này không hiệu quả đối với tôi. Nó được xử lý ': some_input? 'Là sự thật (vì nó không phải là' nil' hoặc 'false'). –

+0

Điều này làm việc cho tôi bằng cách sử dụng semantic_form_for –

3

Đối với nhiều hộp kiểm, theo cách này:

<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %> 
Các vấn đề liên quan