2014-09-14 2 views
2

레일스를 처음 사용하고 Simple_Form, Devise 및 체크 박스와 관련된 문제가 있습니다.레일 Simple_Form 복수 선택 체크 박스

사용자가 하나 이상의 체크 박스를 체크하려는 컬럼을 포함하여 내 Devise 모델에 몇 가지 추가 열을 추가했습니다. 운영의

지역 :이 유사 [] 잉글랜드 [] 웨일즈 [] 스코틀랜드

모든 것은 괜찮지 만, 나는 여러 영역이 다음 저장을 선택하면, 선택 항목은에 저장하지 마십시오 데이터 베이스.


은 여기 내 보기 코드의 [응용 프로그램/뷰/궁리/등록/edit.html.erb] : 여기

<%= simple_form_for(resource, html: { class: 'form-horizontal'}, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 

<%= f.input :areas, :as => :check_boxes, :collection => ["England", "Wales", "Scotland", "Northern Ireland"] %> 

<% end %> 

그리고 내 와 ApplicationController 코드 [응용 프로그램/컨트롤러입니다 /application_controller.rb] :

class ApplicationController < ActionController::Base 
protect_from_forgery with: :exception 

before_filter :configure_permitted_parameters, if: :devise_controller? 

protected 

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :areas 
    devise_parameter_sanitizer.for(:account_update) << :areas 
end 
end 

분명히 뭔가 빠진 것이 틀림 없습니다.하지만 몇 시간 동안 인터넷 검색을 해왔습니다.

도움이 될 것입니다.


편집 :

죄송합니다.

영역을 저장하는 방법에는 여러 가지가 있습니다
create_table "providers", force: true do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "first_name" 
    t.string "last_name" 
    t.string "organisation" 
    t.string "street" 
    t.string "city" 
    t.string "county" 
    t.string "postcode" 
    t.string "areas" 
    t.string "methods" 
end 

add_index "providers", ["email"], name: "index_providers_on_email", unique: true 
add_index "providers", ["reset_password_token"], name: "index_providers_on_reset_password_token", unique: true 
+0

정보를 너무 적게 제공했습니다. db 스키마 란 무엇입니까 (데이터베이스에 표시된 영역은 어떻게 의미합니까?). – Lucas

+0

'areas'는 연관성이 있습니까? – kobaltz

+0

@Lucas - 사과. 스키마를 포함하도록 내 질문을 업데이트했습니다. – diferse

답변

1

,

1) 가장 좋은 방법은 새로운 모델이라는 영역을 만들고 많은 -하는 것입니다 : 여기에 유증 (실제 이름이 '사업자') 테이블의 방식입니다 to-many 연관을 사용자와 연관시킵니다. check. 이것은 사용자가 많은 프로젝트를 협업하는 기본 앱입니다.

2) 별도의 영역 모델을 생성하지 않으려면 열 사용자 중 하나에 영역을 저장할 수 있습니다. 어느 쪽이든 serialize 열 수 있습니다. 여기서 ar 또는 해시 양식으로 데이터를 저장할 수 있습니다.

3) 사용자의 필터를 추가하기 전에 사용자를 저장하기 전에 영역에 가입하고 문자열로 저장하십시오.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 나는 (1) 내가해야만하는 방법일지도 모른다라고 생각한다. (2) 및 (3)과 관련하여, Devise에 대한 내 컨트롤러를 만들어야합니까? (이 솔루션과 유사합니다) (http://stackoverflow.com/questions/3546289/override-devise-registrations-controller)? – diferse

+0

필요 없음. Devise는 데이터를 생성하는 동안 직렬화 형식으로 영역을 저장합니다. (3) 영역 배열을 전달할 수있는 사용자 모델에서 저장 방법을 만들기 전에 쉼표로 결합하고 영역 필드로 설정해야합니다. – bunty

+0

나를 용서해주십시오. 저는 레일스에서 ​​아주 새로 왔습니다.모델에 대한 데모 코드를 알려주시겠습니까? 귀하의 성원에 진심으로 감사드립니다. – diferse