2010-08-04 4 views
3

사용자가 링크를 제출할 수있는 웹 앱이 있고 자신의 웹 사이트 링크와 자신이 소유하지 않은 웹 사이트 링크가 있다고 가정 해 봅시다. 제출 양식은 링크의 도메인을 제출할 때를 제외하고 두 경우 모두 거의 동일합니다.레일 : 제출 후 매개 변수 유지

사용자가 등록 된 웹 사이트 목록에서 제출하는 경우 해당 웹 사이트의 드롭 다운 목록이 표시됩니다.

사용자가 링크를 제출하는 경우 사용자는 attr_accessor를 통해 "링크"모델에 값을 가져 오는 필드에 도메인을 입력합니다. 그런 다음 "링크"모델은 해당 도메인에서 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 %> 

이 문제는 사용자가 오류를하게하고 일부 검증은 실패하는 경우이다 "렌더링 : 행동 => '새' '코드가 실행하고 모든 도착 params의 정보가 손실됩니다. 그 정보를 유지할 방법이 있을까요 아니면 이것을 다른 방법으로 할 수 있습니까?

답변

5

나는 문제의 막연한 이해를 가지고,하지만 당신이 원하는 것 :

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

이 방법은, other의 현재 값이 유효성 검사가 실패 할 경우, 그것은 여전히 ​​액세스 할 수 있습니다, 다시 제출 될 것이다 .

+0

신난다. 이것은 완전히 작동합니다. –

+0

비트 클리너 : '<% = hidden_field_tag ​​: other, params [: other] %>' –