2012-07-27 2 views
2

RailsCasts#302은 best_in_place gem을 사용하여 내부 편집에 대해 설명했습니다. 젠더 옵션을 위해 Ryan은 show.html.erb에서 배열을 사용하고 드롭 다운 상자를 만듭니다 (젠더 섹션에서 배열을 명시 적으로 정의하는 부분 참조).모델 자체에 정의 된 배열 컬렉션에 대해 best_in_place gem을 사용하여 레일스 편집을 수행했습니다.

<p> 
    <b>Gender:</b> 
    <%= best_in_place @user, :gender, type: :select, collection: [["Male", "Male"], ["Female", "Female"], ["", "Unspecified"]] %> 
</p> 

하지만 내가 원하는 것은 내가 좋아하는 모델 자체 내부 배열 정의입니다 : (내 배열 요소가 간단하고 카운트 짧은하지 않기 때문에) 예를 들어

:

사용자. RB

class User < ActiveRecord::Base 
    def authencity_types 
    ['Asian', 'Latin-Hispanic', 'Caucasian'] 
    end 
end 

은 어떻게 best_in_place 구문을 사용하여 드롭 다운 등이 배열의 요소를 사용하기 위하여려고하고있다.

PS :이

<% @users.each do |user| %> 
    <%= best_in_place user, :authencity, type: :select, :collection => User::authencity_types %> 
<% end %> 

같은 것을 시도했다 그러나이 정의되지 않은 방법을 사용하여 사용자 모델에서 인스턴스 메서드를 정의하는, 그래서 이것을 시도하고

답변

4

을 authencity_types 말한다.

<% @users.each do |user| %> 
    <%= best_in_place user, :authencity, type: :select, :collection => user.authencity_types %> 
<% end %> 

또는 이와 같은 클래스 메소드로 정의 할 수 있습니다.

class User < ActiveRecord::Base 
    def self.authencity_types 
    ['Asian', 'Latin-Hispanic', 'Caucasian'] 
    end 
end 

또는 동적 일 필요가없는 상수를 사용하는 것이 좋습니다.

+0

이렇게했습니다. Ryan에게 감사드립니다. :) 나는 나를 괴롭히는 아주 작은 기본적인 것이 있다는 것을 알았다. 그러나 혼란 스럽다. – uday

+1

어떤 이유로 배열의 배열로 배열을 만들었으므로 두 번째 char 또는 각 배열 만 표시됩니다. '아시아계', '아시아계', '라틴계 - 히스패닉계', '라틴계 - 히스패닉계', '백인계', '백인계'] ' – uday