2017-03-31 12 views
0

하나의 상수로부터 collection_check_boxes를 직렬화하는 몇 가지 방법이 있습니까? 이 같은 뭔가 :Rails4 : 배열의 collection_check_boxes

# model 
class tutorial < ActiveRecord::Base 
    serialize :option 
    TYPES = ["Option 1", "Option 2", "Option 3"] 
end 

# view 
<%= form_for(@tutorial) do |b| %> 
    <%= f.collection_check_boxes(:option, Tutorial::TYPES, :id, :name) do |b| %> 
     <%= b.label class:"label-checkbox" do%> 
     <%=b.check_box + b.text%> 
     <%end%> 
    <% end %> 
<% end %> 

또는 단지 :

undefined method `id' for "Option\t1":String 

내 허가 매개 변수가 이미 option: []

로 설정 : 나는 모두를하려고하면

<%= f.collection_check_boxes :option, Tutorial::TYPES, :id, :name %> 

내가 오류

누군가 이전에 그렇게 했나요?

감사합니다. 세 번째 옵션 값 property을 설정이라고하는 방법이며, 두 번째 모음이다

collection_check_boxes(method, collection, value_method, text_method, options = {}, html_options = {}, &block)` 

첫번째 전송하는 방법으로서, 제 4가이다

답변

1

정의는 메서드를 호출하여 텍스트를 가져 와서 옵션의 레이블로 배치합니다. 거기

<%= f.collection_check_boxes :option, Tutorial::TYPES, :id, :name %> 

는 컬렉션으로 (경우 문자열 배열이다) Tutorial::TYPES를 사용하고, 각 스트링에 idname 메소드를 호출한다.

귀하의 컬렉션 Tutorial.all해야하고, 레이블을 얻을, 당신은 예를 들어, 그에 대한 Tutorial 객체의 메소드를 구현해야합니다 :

enum type: [ 
    :type1, 
    :type2, 
    :type3, 
] 

그리고 다음과 같이 사용 :

<%= f.collection_check_boxes :option, Tutorial.all, :id, :type %> 
+0

하지만 'Tutorial.all'을 사용하면 모델에서 쿼리를 수행합니다. 이것은 내가하고 싶지 않은 것입니다. 내가 필요한 것은 'select'도우미를 사용할 때처럼 배열에서 호출하는 것입니다 : <% = f.select (: lang, options_for_select (User :: LANGS, @ user.lang), {}, {}) %> –

+0

@FernandoAureliano 좋아, 두 개의 마지막 요소는 콜렉션의 각 요소에서 호출하는 메소드이기 때문에': id'와': name'이 아니어야합니다. 그래서': id'와': id'를 호출하려고합니다. name'을''Option 1 ': String'으로 설정하면됩니다. 키 또는 값이 인덱스 인 곳에서'TYPES'을 해쉬로 바꿀 수 있습니다 :'<% = f.collection_check_boxes : option, Tutorial :: TYPES, : key, : value %>'. –

+0

[1, '옵션 1'], [2, "옵션 2"], [3, "옵션 3"]]'같은 배열을 사용하여 [1, '에 대해'정의되지 않은 메소드 키 ' –