2012-02-21 2 views
4

빠른 경고 : 저는 Rails에 처음 접했고 지식은 다소 쿠키 커터와 비슷합니다. 나는 어떤 일을하는 법을 알고 있지만, 나는 그들이 항상 일하는 이유에 대한 중요한 이해가 부족합니다.Form_For를 사용하여 모델의 해시 속성을 업데이트하는 방법

현재 주소, 전자 메일 등과 같은 정보가 들어있는 사용자 모델이 있습니다. 또한 visible이라는 해시가 있습니다. 해시의 키는 각각의 정보 조각이며 값은 정보가 공개적으로 표시되기를 원하는지 여부에 대해 true 또는 false입니다. 이것이 최선의 방법인지 확신 할 수는 없지만, 정보의 각 비트에 대해 부울 변수를 전체 톤으로 만드는 것 외에 다른 방법을 생각할 수는 없습니다. 마지막으로, 나는 직렬화한다. 데이터베이스의 저장 공간에 표시된다.

편집보기에는 보이는 속성을 나타내는 정보의 각 필드 옆에 체크 박스가 있어야한다. 이 주제와 관련된 수많은 게시물을 읽고 코드 변형을 시도한 후에는 언제나 어떤 종류의 오류가 발생합니다.

<%= form_for(@user, :id => "form-info-personal") do |f| %> 
... 
<%= f.label :name %> 
<%= f.text_field :name %> 
<%= f.check_box :visible[:name] %> 

을하지만이 기호는 정수로 구문 분석 할 수 없다는 오류 메시지가 다음과 같이 나에게 가장 직관적으로 올바른 보이는 코드입니다. 나는이 파싱이 어디에서 일어나려고하는지조차 모르겠다.보기가 아니라면 배열로 보이고 이름을 인덱스로 사용하려고한다.

이 질문이 사소한/겉으로보기에는 무의미한/중요한 정보가 부족한 경우 사전에 사과드립니다. 팁, 제안 사항, 링크 또는 "귀하가 근본적으로 잘못하고있는 경우에도 이러한 방식으로 돌아가서 할 수 있습니다"라는 라인을 따라 있어도 매우 감사 할 것입니다. -Nick

+0

멀리 직렬화에서 그대로. 첫 번째 문제는 아니지만 직렬화로 인해 더 많은 문제가 발생합니다. 특정 열을 추가하는 것은 전혀 잘못된 것이 아닙니다. – wanghq

+0

@wanghq : 직렬화에 아무 문제가 없습니다 (바로 요리하는 경우). –

답변

6

레일 3.2

는 하나의 필드에 임의의 설정을 저장할 수있는 nice addition to ActiveRecord을 소개합니다.

class User < ActiveRecord::Base 
    store :settings, accessors: [ :color, :homepage ] 
end 

u = User.new(color: 'black', homepage: '37signals.com') 
u.color       # Accessor stored attribute 
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor 

그래서, 코드는 다음과 같이 수 :

# model 
class User < ActiveRecord::Base 
    store :settings, accessors: [ :name_visible, :email_visible ] 

end 

# view 
<%= f.label :name %> 
<%= f.text_field :name %> 
<%= f.check_box :name_visible %> 
+0

당신은이 추가를 위해 내 앱을 3.1에서 3.2로 업데이트 할 가치가 있다고 생각합니까? 이것이 첫 번째 Rails 앱이기 때문에 "업그레이드"하는 것이 얼마나 어려울 지 알지 못합니다. 필자는 실수하지 않는 한 Rails가 하위 호환성을 보장하지 않으므로 한 방향에서 더 쉽게 삶을 살기 위해 항상 새로운 문제가 있음을 알게되었습니다. –

+0

3.1에서 3.2 로의 업그레이드는 [절대적으로 고통 스럽습니다] (http://guides.rubyonrails.org/3_2_release_notes.html#upgrading-to-rails-3-2). Gemfile에서 일부 gem 버전을 변경하면됩니다. 업그레이드하지 않을 이유가 없습니다. –

+0

그래, 업그레이드가 어려워 모델이 업데이트되었습니다. 나는 그것을 콘솔에서 편집 할 수 있으며 아주 잘 작동한다. 유일한 문제는 양식이 해당 필드를 업데이트하는 것으로 보이지 않는 것입니다. 나는 이것이 왜 있는지 전혀 모른다. 양식은 여전히 ​​다른 모든 필드를 업데이트하지만 확인란을 true로 변경하면 설정 필드가 {}이됩니다. 어떤 아이디어? 업데이트 : 콘솔에서 name_visible과 같은 필드의 값을 수동으로 설정하면 양식로드시 확인란의 모양이 변경되지만 확인란의 값을 변경해도 데이터베이스의 값은 변경되지 않습니다. –

관련 문제