2011-01-29 5 views
8

У меня есть неприятная большая целевая страница с регистрационной формой в середине ее. Если я отправлю форму и проверка не удалась, я хочу снова отобразить целевую страницу, но я хочу, чтобы она была прокручена до регистрационной формы, чтобы они могли видеть ошибки и вносить изменения. Можно ли перейти к форме с помощью метода render, или мне нужно сделать redirect_to "account/new#theFormID"?Как сделать Rails визуализировать представление и автоматически прокручивать вниз?

Я предпочел бы не делать редирект, потому что вы должны сохранить информацию о форме в сеансе, заселить форму, и так далее, и я хочу, чтобы придерживаться обычного

if @resource.save then redirect_to ... 
else render "new" 
end 

ответ

4

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html

redirect_to profile_path(@profile, :anchor => "wall") 

Вот как вы передаете якоря.

+1

Хороший знать, хотя это не то, что я спросил. Как мне это сделать с помощью «render»? – icecream

+0

Вы можете сделать это только с помощью перенаправления. – s84

+0

Вот чего я боялся. Положите это как ответ, и я соглашусь с этим. – icecream

27

Поместите директиву якорный на форму и вы можете рассчитывать на: вынести из контроллера ...

form_for(@my_model, :url => { :action => "create" , :anchor => "my_anchor" }) 
+3

Человек, почему люди проголосовали за вас! Эта сладкая часть ваших знаний просвела мою маленькую темную комнату на несколько минут! У меня есть стремление иметь приложение, в котором большинство функций работают даже без javascript, и это действительно великолепный вариант! thx много, я буду использовать его с удовольствием: 'form_for (@reply,: url => create_reply_post_comment_path (@post, @comment,: anchor =>" reply_comment _ # {@ comment.id} ")' – Bachet

+2

+1, поэтому аккуратный и простой, я ревную, я об этом не думал –

+0

Ничего себе, это здорово. Не ожидал, что сможешь это сделать, был приятным сюрпризом ответа. –

1

И еще одна вещь ... если это ссылка, как я на самом деле с помощью, вам нужно добавить уникальный param, поэтому браузер думает, что он представляет что-то новое, иначе он просто обновляется, не поражая сервер. Я использую:

link_to "REFRESH", refresh_my_model_path(@my_model, :anchor => "my_anchor", :options => {:id => Time.now}) 
1

Используется javascript?

<script> 
window.location.hash="ANCHOR"; 
</script> 
+0

Просто убедитесь, что javascript вызывается только в случае ошибки проверки. =) –

1

Я прокручивается на якорь с render использованием глобального вара и Javascript (в намекал Ибрагим).

На моем контроллере я имел это:

@anchor = "my_anchor" 
render :action => "edit" 

И на моей странице, я проверил, если бы я имел глобальный @anchor, и если да, бросьте на него с помощью Javascript:

<% if @anchor %> 
    <script type="text/javascript"> 
    window.location.hash = "<%= @anchor %>"; 
    </script> 
<% end %> 
Смежные вопросы