이것은 길기 때문에 당신이 나와 함께 있기를 바랍니다.레일 STI 미스테리 - 왜 유형이 클래스에서 클래스로 변경 되었습니까?
저는 MrUpdate와 TriggeredUpdate라는 두 개의 서브 클래스로 구성된 Update라는 모델을 가지고 있습니다. 단일 테이블 상속을 사용하여 유형 필드를 업데이트 할 문자열로 추가했습니다.
내 견해로는 어떤 유형을 표시할지 결정하는 것입니다. 나는 형식은 문자열이기 때문에, 나는 업데이트가 MrUpdate 일 때 즉, false로 평가,
<% if @update.type == 'MrUpdate' %>
이 실패해야 가정한다. 이 시점에서 @ update.type.type이 Class임을 알았습니다. 업데이트가 MrUdpate 일 때, 즉 비교가 true로 평가,
<% if @update.type == MrUpdate %>
그것은 일 : OK, 무엇이든, 내가 생각, 그래서 그것을 변경되었습니다. 그런 다음 다시 내보기에서 아래쪽으로 내려 놓았고 다시 실패했습니다 (즉, 업데이트가 MrUpdate 일 때 false로 평가됨).
두 번째 원인은 < % = link_to ... %> 내가 사용하고 jQuery로 버튼을 만드는 호출. 내가보기에이 코드를 넣을 경우 :
<br>
<%= @update.type.type %><br>
<%= @update.type %><br>
<%= link_to 'New Note', new_note_path(:update_id => @update.id), :class => "ui-button" %>
<br>
<%= @update.type.type %><br>
<%= @update.type %><br>
내가 볼 것은 :
Class
MrUpdate
(the New Note button)
String
MrUpdate
그것은 문자열로 클래스에서 변경입니다! 그래서 내가 도대체 내가 잘못했거나 누락 된 것일까? 왜 그렇게해야 link_to? 왜 처음에는 문자열이 아니지만 왜 그것이 바뀌는 지에 관해서는 혼란 스럽다는 것이 명확하지 않습니다 ...?!? 도움이나 설명이 도움이 될 것입니다. 나는 그것을 맨 위와 다른 방법으로 코딩 할 수 있습니다. 그러나 그런 식으로 광기가 있습니다. 왜 이런 일이 일어나는지 이해해야합니다.
'type'은 예약어의 일종이라고 생각하지 않습니까? – fl00r
예,이 용도로 예약되어 있습니다.MrUpdate와 TriggeredUpdate를 Update에서 파생시키고 Update에 유형 필드를 추가하는 것은 내가 읽은 것에서 단일 테이블 상속을 수행하는 방법입니다. –