假设您有一个Web应用程序,人们可以在其中提交链接,自己网站的链接以及他们不拥有的网站的链接。在这两种情况下,提交表单几乎相同,除了它们提交链接的域时。

如果用户从自己注册的网站列表中提交,则将获得其网站的下拉列表。

如果用户正在提交链接,则该用户将域键入一个字段,该字段的值我通过attr_accessor进入“链接”模型。然后,“链接”模型在该域上执行find_or_create方法。

现在,我的解决方案并不令人满意:
当用户单击“提交链接”时,我将?other = prompt放入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 %>

这样做的问题是,如果用户出错并且某些验证失败,则将执行“render:action =>'new'”代码,并且所有参数中的信息都将丢失。有没有一种方法可以保留该信息,或者完全可以通过另一种方法来保留此信息?

最佳答案

我对您的问题只有模糊的理解,但是您似乎想要这样:

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

这样,other的当前值将被重新提交,并且,如果验证失败,它将仍然可以访问。

关于ruby-on-rails - Rails : Keep params after a submit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3401671/

10-14 01:55