2012-10-22 4 views
1

나는 (모든 필수는 아님) first_name, last_name, birthday, profession, pet_name 속성을 가진 사용자 모델을 가지고 있습니다.레일스에 일반 폼 만들기

사용자는 first_name과 생일을 입력해야합니다.

어떻게 든 (이 경우 - LAST_NAME 및 직업) 전무 속성을 얻으려면

. 그리고 그 중 하나를 임의로 선택하고 그것을 채우기 위해 사용자가 요구하는 양식을

나는 @user.attributes.map{|k,v| v==nil ? k : nil}.compact I를 할 경우 nil 인 속성을 얻을 수 있습니다.

이 방법을 모든 속성에서 사용할 수 있도록 일반 양식을 충분히 일반화하려면 어떻게합니까?

답변

3

당신은 추가 필드에 대한 양식을 표시하기위한 컨트롤러 액션에 @field 작성하고 그 필드의 형태로 표시 할 수 있습니다 : "request.post"

# controller action 
def additional_form 
    @field = @user.attributes.select{|k,v| v.nil?}.keys.sample 

    if request.post? 
    @user.update_attributes(params[:user]) and redirect_to root_path 
    end 
end 

# view for this action (additional_form.html.erb) 
<%= form_for @user do |f| %> 
    <%= f.text_field @field %> 
    <%= f.submit %> 
<% end %> 
+0

는 IS 무엇을 부품? –

+0

컨트롤러의 동작에서 새로운 속성을 저장하려는 모든 것을 할 수 있습니다. 방금 예를 들어 게시했습니다. 동작은 양식이 게시 될 때 @user 레코드가 채워진 속성으로 업데이트되고 사용자가 루트 경로로 리디렉션된다는 것입니다. – Hck

+1

네, @Hck이 그것을 못 박았습니다. 다음과 같이 할 수도 있습니다 :'@ user.attributes.reject {| k, v | v} .keys.sample' - 이것은'nil'보다는 false 인 키를 필터링 할 것이지만, 여러분의 경우에는 중요하지 않습니다. –