2013-12-10 3 views
0

내 문제는 여기에 있습니다 : 내 사이트에 국제화를 설정 중이므로 (페이지에 텍스트가 여러 번 번역 될 수 있습니다). 나는 rails cast을 따라 나를 대신 번역을 관리 할 수있는 페이지를 설정하여 모든 yml 파일을 수동으로 수정해야했다.redis 항목에 대한 삭제 링크를 만드는 레일

나는 모든 것을 설정 했으므로 항목을 잘 만들 수 있습니다. 항목을 삭제하는 기능을 추가하려고합니다. 그리고 벽에 부딪혔습니다. redis에서 항목을 삭제하려면 링크를 올바르게 설정하는 것처럼 보이지 않습니다. 이 일을 복잡하게 만든 첫 번째 일은 (적어도 저에게) 활성 레코드 (예 : 사용자 등)를 통해 생성 된 객체를 삭제하지 않는다는 것입니다. 그래서 활성 레코드 객체를 사용하여 link_to 또는 form_for에 대한 URL을 생성하는 대신 수동으로 생성해야합니다.

내가 지금까지 읽은 것부터는 링크를 양식에 넣어야합니다 (그리고 redis db를 수정하기 때문에 게시하도록 설정). 그래서 컨트롤러에 설정 한 동작에 직접 태그의 양식에 올바른 구문을 만들려고했습니다.

컨트롤러 :

class InternationalizationTranslationsController < ApplicationController 
    def index 
    @translations = I18n.backend.store 
    end 

    def create 
     I18n.backend.store_translations(params[:locale], {params[:key] => params[:value]}, :escape =>false) 
     redirect_to internationalization_translations_url, :notice => "Added translation" 
    end 

    def destroy 
    puts "Key is: #{params[:key]}" 
    I18n.backend.delete(params[:key]) 
    redirect_to internationalization_translations_url, :notice => "Removed translation" 
    end 
end 

보기 :

<%= form_tag internationalization_translations_path do %> 
    <p> 
    <%= label_tag :locale %> 
    <%= text_field_tag :locale %> 
    </p> 
    <p> 
    <%= label_tag :key %> 
    <%= text_field_tag :key %> 
    </p> 
    <p> 
    <%= label_tag :value %> 
    <%= text_field_tag :value %> 
    </p> 
    <p><%= submit_tag "Submit" %></p> 
<% end %> 
</div> 
    <div class="grid_7 top_padding"> 
<table class="trans_table"> 
<% @translations.keys.each_with_index do |key, i| %> 
<tr class="<%= i%2 == 0 ? "even" : "odd" %>"> 
    <td><%= key %></td> 
    <td><%= @translations[key] %></td> 

가 그럼 난 form_for와 함께 연주하고 아직도 그, 문서 (form helpersform tag docs) 결국이 끝나는보고 때 form_tag 작동하지 않음 :

,210

지금

<%= form_tag(internationalization_translations_path, action: "destroy", method: "post", key: key) do %> 
    <%= submit_tag "Delete" %> 
    <% end %> 

나는 또한 필요 그래서는 DB를 편집하기 때문에 삭제 링크/버튼 형태로되어야하는 이유에 연결이 post 건너 오기 전에 잠시 동안 LINK_TO와 함께 연주 얻을 대신 게시물 수 있습니다. 나는 이것이 꽤 직설적 인 작업처럼 보이기 때문에 다소 좌절감을 느낀다. 그러나 나는 나의 특별한 문제, 특히 redis 항목과 activerecord 객체에 대한이 링크를위한 라우팅에 관해 명확한 답을 찾는 어려움을 겪고있다.

** 각 항목에 대한 루프에서 단추의 양식이 만들어지기 때문에 각 단추마다 고유 한 형식의 색인이 있어야합니다.

모든 통찰력이나 링크는 크게 감사하겠습니다.

감사합니다,

앨런

+0

에 삭제 호출 후

TRANSLATION_STORE = Redis.new(:db => 10) 

과 : 그래서 그 대신 내 초기화에서

I18n.backend.delete(params[:key]) 

의 나는 레디 스 인스턴스를 생성 할 때 전역 변수를 설정했다 각 항목에 대한 redis-key, 왜 새로운 경로 + 컨트롤러 작업을 생성하지 않습니까? 지금 당신은 올바른 redis.key와 새로운 작업에 게시물을 보낼 수 -이 방법은 u 키를 삭제할 수 있습니까? delete_translation_path (key : your_key) – marvwhere

+0

** 컨트롤러 ** 코드는 form_for 버튼을 통해 전달하려고하는 키를 삭제하려고하는 내 컨트롤러 InternationalizationTranslationsController 내의 작업입니다. 내 경로에는 리소스가 있습니다. 다른 형식으로 작동하는 internationalization_translations가 동작을 생성합니다. 어떤 이유로 나는 destroy 액션을 사용하고 key를 param [: key]로 보내는 방법을 알아낼 수 없다. (위에서 form_for 링크를 설정하는 다른 방법에서 보여준 것처럼) –

+0

"key- 옵션 "을 form_tag에서 제거하고 버튼 앞뒤에"hidden_field_tag ​​: key, key "를 추가 한 다음 다시 시도하십시오. – marvwhere

답변

0

좋아, 그래서 몇 가지를 재설정을 파악하고 marvwhere의 조언을 복용했다. 폼이없는 링크, 활성 레코드 객체를 조작하는 다른 컨트롤러에 대해 생성 된 링크로 설정하려고했습니다. 그러나 이것이 기본 소멸 액션 이외의 커스텀 액션을 만드는 다른 경우 였기 때문에.

 <%= form_tag(destroy_key_internationalization_translations_path, method: :post) do %> 
     <%= hidden_field_tag 'key', key %> 
      <%= submit_tag "Delete" %> 
     <% end %> 

여기서 internationalization_translation 컨트롤러 내에서 destroy_key 작업을 만들었습니다.

또한 redis에서 키를 삭제해야합니다. 생성 된 실제 Redis 인스턴스를 사용해야했습니다. 그 객체 u는이

TRANSLATION_STORE.del(params[:key]) 
관련 문제