2011-12-21 3 views
0

등록 된 사용자가 공동으로 편집 할 수있는 레일스 모델 (몽고 이드와 함께 유지)이 있습니다. 그러나 이전에 공백이거나 nil 인 경우에만 특정 속성을 편집 할 수 있습니다.레일스 모델 속성이 이전에 비어있는 경우에만 허용

예를 들어, 누군가가 객체를 만들고, title 속성을 "Test Product"으로 설정했다고 가정 해 보겠습니다. 그런 다음 다른 사용자가 와서 price에 대한 값을 추가하려고합니다.이 값은 지금까지 nil입니다.

이전에 입력 한 속성을 잠그는 동안이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

2

는이 같은 일을하는 데 사용할 수있는 몇 가지 좋은 유틸리티 메소드의 ActiveRecord::Dirty 모듈로 봐 :

NON_UPDATABLE_ATTRIBUTES = [:name, :title, :price] 
before_validation :check_for_previously_set_attributes 

private 
def check_for_previously_set_attributes 
    NON_UPDATABLE_ATTRIBUTES.each do |att| 
    att = att.to_s 
    # changes[att] will be an array of [prev_value, new_value] if the attribute has been changed 
    errors.add(att, "cannot be updated because it has previously been set") if changes[att] && changes[att].first.present? 
    end 
end 
0

가장 쉬운 방법은, 내가 생각, 양식 자체에 대한 확인하는 것입니다. 사람이 입력란을 편집 할 수없는 경우 입력 필드에 add : disabled => true라고 말하면됩니다.

<% if @my_object.name %> 
    <%= f.text_field :name, :disabled => true %> 
<% else %> 
    <%= f.text_field :name, :disabled => true %> 
<% end %>  

을하지만 사용자를 사용하여 (내가 거기에이 코드를 작성하는 예뻐 방법은 생각)이 그 일을 할 수 없음을 다시 시각적 공급, 그것은하지 allor에 항상 낫다 오류 메시지를 표시하는 것보다

+1

사용자가 양식 필드를 수정하고 제출할 수 없으므로 모델 유효성 검사가 여전히 필요합니다. – iwasrobbed

+0

좋은 점 :) 그래서 나는 gareth와 나의 지위의 조합을 위해 갈 것이다. –

관련 문제