首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails为redis条目创建删除链接

Rails为redis条目创建删除链接
EN

Stack Overflow用户
提问于 2013-12-10 22:17:20
回答 1查看 239关注 0票数 0

这里是我的问题:我要在我的站点上设置国际化(这样我们就可以在页面上有多个文本的翻译)。我按照一个钢轨浇铸设置了一个可以管理翻译的页面,而不是手动编辑每个yml文件。

我已经设置了所有的东西,可以创建良好的条目,我试图添加删除一个条目的能力,我已经撞墙了。我似乎无法正确设置链接以从redis中删除条目。使这件事变得复杂的第一件事(至少对我来说)是,我不会删除通过活动记录创建的对象(比如用户等)。因此,与其使用active record对象来为link_to或form_for构造url,我还必须手动构造它。

根据我到目前为止所读到的内容,我必须将链接放在一个表单中(并设置为post,因为我们正在修改redis db)。因此,我一直试图在form表单中创建正确的语法,以直接指向我在控制器中设置的操作。

控制器:

代码语言:javascript
复制
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

视图:

代码语言:javascript
复制
<%= 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_tag来查看文档(表单帮手表单标记文档),最终以这些文档结尾,这些文档仍然不起作用:

代码语言:javascript
复制
    <%= form_tag(controller: "internationalization_translations", action: "destroy", method: "post", key: key) %>
    <%= submit "Delete" %>
    <% end %>

而现在

代码语言:javascript
复制
    <%= form_tag(internationalization_translations_path, action: "destroy", method: "post", key: key) do %>
    <%= submit_tag "Delete" %>
    <% end %>

在遇到这个link_to之前,我还玩了一段时间帖子,它链接到为什么delete链接/按钮应该以一种形式出现,因为它正在编辑DB,所以它需要post而不是get。我有点沮丧,因为这似乎是一个非常直截了当的任务,但我遇到了一些困难,找到一个明确的答案,我的具体问题,特别是这个链接的红色条目,而不是一个activerecord对象。

**此外,由于按钮的表单是在循环中为每个条目创建的,所以应该为每个按钮指定带有索引的表单吗?

任何洞察力或链接都将不胜感激。

谢谢,

艾伦

EN

回答 1

Stack Overflow用户

发布于 2013-12-12 20:02:14

好的,最后我重新设置了一些东西,并采纳了marvwhere的建议。我想把它设置为一个没有表单的链接,它是如何为其他正在操作活动记录对象的控制器生成的。但是,由于这是另一种情况,所以除了默认的销毁操作之外,定制操作是有效的。

代码语言:javascript
复制
      <%= form_tag(destroy_key_internationalization_translations_path, method: :post) do %>
      <%= hidden_field_tag 'key', key %>
          <%= submit_tag "Delete" %>
      <% end %>

在其中,我在destroy_key控制器中创建了internationalization_translation操作。

此外,从redis中删除密钥也需要更改。我不得不使用实际创建的Redis实例。所以而不是

代码语言:javascript
复制
I18n.backend.delete(params[:key])

在我的初始化器中,我必须在创建Redis实例时设置一个全局变量:

代码语言:javascript
复制
TRANSLATION_STORE = Redis.new(:db => 10)

然后调用该对象的delete。

代码语言:javascript
复制
TRANSLATION_STORE.del(params[:key])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20506513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档