【发布时间】:2013-12-10 22:17:20
【问题描述】:
这是我的问题: 我正在我的网站上设置国际化(因此我们可以对页面上的文本进行多种翻译)。我已经按照rails cast 设置了一个可以管理翻译的页面,而不是我必须手动编辑每个 yml 文件。
我已经设置好所有内容并且可以很好地创建条目,我正在尝试添加删除条目的功能,但我碰壁了。我似乎无法正确设置链接以从 redis 中删除条目。使这件事变得复杂的第一件事(至少对我而言)是我没有删除通过活动记录创建的对象(如用户等)。因此,我必须手动构造它,而不是使用活动记录对象来构造 link_to 或 form_for 的 url。
从我目前阅读的内容来看,我必须将链接放在一个表单中(并设置为发布,因为我们正在修改 redis 数据库)。所以我一直在尝试以标签的形式创建正确的语法,以指向我在控制器中设置的操作。
控制器:
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_tag 查看文档(form helpers 和 form tag docs)最终以这些结尾,但仍然无法正常工作:
<%= form_tag(controller: "internationalization_translations", action: "destroy", method: "post", key: key) %>
<%= submit "Delete" %>
<% end %>
现在
<%= form_tag(internationalization_translations_path, action: "destroy", method: "post", key: key) do %>
<%= submit_tag "Delete" %>
<% end %>
在遇到此post 之前,我还使用了 link_to 一段时间,这与为什么删除链接/按钮应该在表单中有关,因为它正在编辑数据库,因此需要发布而不是获取。我有点沮丧,因为这似乎是一项非常简单的任务,但我在找到关于我的特定问题的明确答案时遇到了一些困难,特别是针对 redis 条目而不是 activerecord 对象的此链接的路由。
**还因为按钮的表单是在循环中为每个条目创建的,所以我可能应该用索引命名表单,以便它特定于每个按钮?
任何见解或链接将不胜感激。
谢谢,
艾伦
【问题讨论】:
-
当您拥有每个条目的 redis-key 时,为什么不为它创建一个新的路由+控制器操作?现在您可以使用正确的 redis.key 将帖子发送到新操作 - 在这种方法中您删除密钥? delete_translation_path(key: your_key)
-
这就是 Controller 代码,这是我的控制器 InternationalizationTranslationsController 中的操作,它应该删除我试图通过 form_for 按钮传递的键。在我的路线中,我有资源:internationalization_translations 适用于另一种形式,用于创建操作。出于某种原因,我无法弄清楚如何让它使用销毁操作并将密钥作为参数发送 [:key](如上所示,我尝试设置 form_for 链接的不同方式)
-
从 form_tag 中删除“key-option”,在按钮之前/之后添加一个“hidden_field_tag :key, key”,然后重试。
标签: ruby-on-rails redis form-for rails-i18n