2011-08-09 5 views

답변

6

나는이 보석을 사용하지 않았지만 꽤 솔직하게 보일 것 같습니다. 이 데이터베이스 백업 모델을 사용하기 때문에, 당신은 단순히 정상으로 컨트롤러를 만들 것입니다 : 여기에서

rails g controller Settings 

을 뷰에 표시 할 모든 개별 설정을 수집하는 색인 ​​작업을 정의 할 :

def index 
    @settings = Settings.all 
end 

다음보기에 당신은 설정 루프 그들을 표시 할 수 있습니다

<% @settings.each do |setting| %> 
    <%= setting.var %> = <%= setting.value %> 
<% end %> 
기본 레일에 의해 하나만 settin 제출 기대 때문에

는 지금까지 편집과 같은 ...이 까다로울 수 있습니다 g을 한 번에 편집하십시오. 이런 식으로 할 수 있지만 아약스로 편집을 구현하지 않으면 지루하고 비 직관적 일 수 있습니다.

또 다른 방법은 업데이트 방법을 설정하여 모든 개별 설정을 한꺼번에 허용하고 루프백하고 새 값으로 업데이트하는 것입니다. 그것은 다음과 같이 보일 수 있습니다

// The /settings route would need to be setup manually since it is without an id (the default) 
<%= form_tag("/settings", :method => "put") do %> 
    <% @settings.each do |setting| %> 
    <%= label_tag(setting.var, setting.var) %> 
    <%= text_field_tag(setting.var, :value => setting.value) %> 
    <% end %> 
    <%= submit_tag("Save Changes") %> 
<% end %> 

이해야 모든 설정의 출력 라벨과 텍스트 필드의 값과 현재 값으로 VAR 이름으로 (그들은 변수 @settings에 할당 된 주어진). 라우팅이 설정되었다고 가정하면이 양식을 제출할 때 매개 변수를받는 작업은 params 변수의 모든 새 설정을 사용해야합니다. 이것은 가장 좋은 방법은 당신이 설정을 편집하고 얼마나 많은 설정 당신이 얼마나 자주에 따라하지 않을 수 있습니다

def update 
    params.each_pair do |setting, value| 
    eval("Settings.#{setting} = #{value}") 
    end 
    redirect_to settings_path, :notice => 'Settings updated' # Redirect to the settings index 
end 

...하지만이 가능한 솔루션입니다 : 그럼 당신은 행동 같은 것을 할 수 있습니다.

+0

이런 쓰레기를 찾고있는 유일한 사람이 평가는 주요 플래그입니다. 이와 같은 일을 할 계획이라면'send'를 사용할 수 있습니다. 그런 일을하려면 Settings 모델에서 속성 설정 세부 사항을 구현해야합니다. 컨트롤러가 모델의 내부 동작을 파악하지 못하게하십시오. – unflores

2

나는 이것에 대한 몇 가지 제안을 찾고 있었고 이것에 대한 또 다른 답은 매우 간단하고 우아한 것으로 나중에 이것을 찾는 사람들에게 찾아 냈습니다. 모델에 동적 접근자를 설정하기 만하면 폼이 일반 속성과 마찬가지로 설정 필드를 가질 수 있습니다. 예는 원래의 대답에서 찾을 수 있습니다

How to create a form for the rails-settings plugin

관련 문제