2010-08-04 2 views
3

Предположим, у вас есть веб-приложение, где люди могут отправлять ссылки, ссылки на свои собственные веб-сайты и ссылки на веб-сайты, которых у них нет. Форма отправки практически одинакова в обоих случаях, за исключением случаев, когда они передают домен ссылки.Rails: сохраняйте параметры после отправки

Если пользователь отправляется из списка своих зарегистрированных сайтов, он получит раскрывающийся список своих сайтов.

Если пользователь отправляет ссылку, пользователь вводит домен в поле, значение которого я получаю в модели «ссылка» через attr_accessor. Затем модель «link» выполняет метод find_or_create в этом домене.

Сейчас мое решение является неудовлетворительным: Когда пользователь нажимает «Отправить ссылку» Я ставлю другой = подскажет в URL и затем этот вид условно:

<% if params[:other] == "prompt" %> 
    <div class="prompt_form"> 

<h2>This link is for:</h2> 
<span class="blue_button"><%= link_to "My Website", new_link_path%></span> <span class="blue_button"><%= link_to "Another User's Site", new_link_path(:other => "yes")%></span> 
</p> 

Когда пользователь делает выбор между этими двумя вариантами в виде делает иначе:

<% if params[:other] == "yes" || current_user == nil %> 
        <strong>Website Domain:</strong><br /> 
        <%= f.text_field :unclaimed_domain %><br /> 
      <% elsif current_user %>   
       <% if current_user.websites.size > 1 %> 
        <p> 
         <strong>Website Domain:</strong><br /> 
         <%= f.collection_select :website_id, current_user.websites.valid, :id, :domain, {:include_blank => true} %> <%= error_message_on :link, :website %><br /> 
         <%= link_to "Add a Website", new_website_path %> 
        </p> 
       <% else %> 
        <p> 
         <strong>Website Domain:</strong><br /> 
         <%= f.collection_select :website_id, current_user.websites.valid, :id, :domain %><br /> 
         <%= link_to "Add a Website", new_website_path %> 
        </p> 
       <% end %> 

проблема с этим состоит в том, что если пользователь делает ошибку и не некоторые валидации, в «рендеринге: действие =>„новый“» код запускается на выполнение, и все информация в параметрах теряется. Есть ли способ сохранить эту информацию или, возможно, другой способ сделать это в целом?

ответ

5

У меня есть только смутное представление о вашей проблеме, но кажется, что вы хотите:

<input name="other" value="<%= params[:other] %>" type="hidden"> 

Таким образом, текущее значение other будет повторно, и, если проверка не пройдена, то все равно будет доступен ,

+0

Удивительно, это полностью работает. –

+0

немного чище: '<% = hidden_field_tag: other, params [: other]%>' –

Смежные вопросы