Я не могу думать о чисто серверном подходе, но вы могли бы использовать немного гибридных javascript / rails.
при условии, что у вас есть выделенный шаблон макета iframe, например 'layouts / iframe.erb'
Вы могли бы поместить некоторый javascript в голову, чтобы проверить, загружается ли он как iframe, и, если это не так, перенаправить на действие и, возможно, отобразить флэш-сообщение "может загрузить эту страницу только внутри приложения"
JavaScript / рельсы для головы
<script type="text/javascript">
function parentExists()
{
return (parent.location == window.location)? true : false;
};
function check_modal(){
if (parentExists()) {
window.location = '<%= url_for( :controller => "home", :action => 'iframe_action', :iframe_fail => 'true')%>'}
}
check_modal()
</script>
обратите внимание на параметр: iframe_fail, который вы можете проверить в контроллере и делать все, что угодно, если этот параметр присутствует, напримерпоказать флэш-сообщение или перенаправить
пример контроллера
def iframe_action
if params[:iframe_fail]
flash[:notice] = 'can only load inside app'
else
#do something else
end
end
Не очень красиво, но может помочь вам выполнить работу.