2017-12-01 14 views
1

사용자가 생일을 추가 할 수있는 양식이 있습니다. 현재 현재, 누군가가이 양식을 제출할 때마다, 날짜 입력은 항상 값을 가지므로 생일을 추가 할 것입니다.레일 : 양식에 지정된 경우 업데이트 속성 만

확인란을 추가 할 수있는 방법이 있습니까? 선택되어있는 경우에만 생일을 레코드에 저장해야합니까? 확인란을 선택하지 않은 경우 birthday의 현재 값을 제거해야합니다. 컨트롤러에서

= simple_form_for resource, as: resource_name, url: registration_url(resource_name) do |f| 
    = f.input :another_field 
    = f.input :birthday_set?, as: :boolean # or something else? 
    = f.input :birthday 
    = f.input :submit 
+0

가장 간단한 방법은 before_save 콜백을 사용하여 birthday_set 매개 변수를 추적하고, false 인 경우 생일을 null로 설정하는 것입니다. http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html – atomAltera

+0

@atomAltera는 아닙니다. 더 쉬운 방법은'attr_accessor'도 필요하기 때문입니다. – jonhue

+0

그러면 컨트롤러 수준에서 해결해야합니다. 모델 생성에 필요한 모든 필드를 반환하는 create_params 헬퍼가 있다고 가정 해보십시오. 이 도우미 안에서이 검사를 할 수 있습니다. – atomAltera

답변

0

, 당신은 같은 것을 할 수있는 :

def create 
    user = User.new 
    user.birthday = params[:user][:birthday_set?] ? params[:user][:birthday] : nil 
    params[:user].delete(:birthday, :birthday_set?) 
    user.update_attributes(user_params) 
    ... 
end 

을 그리고 당신의 PARAMS의 permit 요소에서 :birthday/:birthday_set? 키를 제거합니다. 나는 form_tag 필드에 :birthday_set? 이동보고 싶은데

은 그래서 params[:user] 외부 앉아 다음은 PARAMS에서 그것을 삭제에 대해 걱정할 필요가 없습니다. db에 저장하지 않으면 어쨌든 더 이해가됩니다.

이렇게하면 unpermitted parameters이 던져지는 것을 방지 할 수 있습니다.

체크 박스가 전환 될 때 js를 사용하여 프런트 엔드의 :birthday 필드를 사용 중지 할 수는 있지만이 경우에도 관계없이 처리 할 수 ​​있습니다.

개인적으로는 @ atomAltera의 경로로 이동하여 attr_accessorbefore_save을 사용합니다. 그러나이를 피하려면이 방법을 사용하십시오.