2013-05-30 31 views
19

Tôi có một mô hình được gọi là người dùng có 2 thuộc tính boolean send_emailsend_text. Tôi có một biểu mẫu chỉnh sửa mô hình Người dùng và tôi muốn nó đặt các thuộc tính đó thành true/false tùy thuộc vào việc hộp đó có được chọn hay không. Dưới đây là hình thức của tôiĐường ray: form_for được đặt thành true hoặc false cho dù hộp được chọn/bỏ chọn

<%= form_for(@user) do |f| %> 
    <div class="field"> 
     <%= f.label :email %> <br /> 
     <%= f.text_area :email %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label :cell %> <br /> 
     <%= f.text_area :cell %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label "Get Email" %> <br /> 
     <%= f.check_box :send_email, {}, true, false %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label "Get Text" %> <br /> 
     <%= f.check_box :send_text, {}, true, false %> <br /> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Submit", class: "button small radius" %> 
    <%= link_to "go back", @user, class: "button small radius secondary" %> 
</div> 
<% end %> 

Và đây là update hành động của user_controller

def update 
    @user = User.find(params[:id]) 
    @user.update_attributes(params[:user]) 
    redirect_to @user 
end 

Hình thức và cập nhật có vẻ như nó hoạt động hoàn hảo, nhưng khi tôi nộp mẫu đơn này với send_email hoặc hộp send_text kiểm tra , nó không thay đổi các thuộc tính của mô hình người dùng (send_email, send_text) thành false

+0

vì vậy câu hỏi của bạn là gì? – proflux

+0

nó không hoạt động lol. xin lỗi tôi quên đăng bài đó, biểu mẫu và cập nhật hoạt động hoàn hảo, nhưng khi tôi gửi biểu mẫu này với hộp send_email hoặc send_text được chọn, nó không thay đổi thuộc tính của mô hình người dùng (send_email, send_text) thành false – user2158382

Trả lời

33

Đường ray sẽ làm điều này cho bạn khi biểu mẫu của bạn đang hoạt động trên một đối tượng, chỉ cần để lại tất cả nội dung bổ sung khỏi thẻ như vậy:

Và tất cả sẽ bắt đầu hoạt động như bạn mong đợi. Các hộp kiểm sẽ được đánh dấu nếu thuộc tính là đúng và ngược lại trạng thái đã chọn khi bạn gửi biểu mẫu sẽ ảnh hưởng đến thuộc tính. Phần còn lại của mã của bạn là tốt.

+1

Cảm ơn bạn, rất đơn giản. Tôi đoán tôi đã nhầm lẫn khi đọc các giải pháp khác cho vấn đề này – user2158382

1

thông tin thêm về hình thức và cập nhật cơ sở dữ liệu

Trên thực tế, câu trả lời cuối cùng là đúng: sử dụng cú pháp form_for là đủ và Rails sẽ làm hiệp hội được kiểm soát: false/kiểm tra: đúng đối với bạn.

tôi đã cùng một vấn đề thậm chí với cú pháp đó. Thực tế là giao diện điều khiển của máy chủ trả lại cho tôi Unpermitted parameter: checkbox_value: đừng quên cập nhật các thông số bắt buộc/được phép của bạn để đưa vào params! Và trong trường hợp của tôi:

# ***_controller.rb 
     private 
     def operator_params 
      params.require(:operator).permit(:name, :website, :checkbox_value, :global) 
     end 
0

tôi đã cùng một problem.I đã

<% @batches.each do |batch| %> 
    <div class="name_list<%=cycle('odd', 'even')%>"><li> 
    <label><%= check_box_tag "send_sms[batch_ids][]", batch.id,false,:class=>'right' %> 
    <div class="att_list_names"> <%= batch.full_name %></div> </label> 
    </li> </div> 
    <% end %> 
Các vấn đề liên quan