0

我正在使用 Rails 表单,它接受用户文本输入并将其发送到控制器。它发送两个信息,文本和文本语言(I18n.locale 变量)。我的表格看起来像这样:

    <%= form_for(:text, :url => {:action => 'create'} ) do |f| %>
    <%= f.label :content, "#{t :"Write whatever you want"}" %><br />
    <%= f.text_area :content, :cols => 80, :rows => 3 %> <br />
    <%=  f.hidden_field :locale, :value => I18n.locale %>
    <%= f.submit "#{t :Post}"%>
<% end %>

我正在使用隐藏字段发送该语言环境值。但我认为这是一个不好的做法。用户可以轻松修改此表单。那么有没有办法在没有任何可见/隐藏字段的情况下自动在其他表单数据中发送该语言环境值?

4

4 回答 4

0

有两种使用rails形式添加变量的方法

<%=  f.hidden_field :locale, :value => I18n.locale %>

<%= form_for(:text, :url => {:action => 'create', :locale => I18n.locale} ) do |f| %>

但是以上两者都可以很容易地被用户修改。

为避免这种情况,您必须使用sessionsssl页面

于 2013-06-05T09:45:22.817 回答
0

希望这个railscast会有所帮助,

http://railscasts.com/episodes/138-i18n?autoplay=true

于 2013-06-05T09:48:40.277 回答
0

如果您想避免用户修改数据,也许您可​​以使用像 locale_session = "en" 这样的会话,并在处理控制器中的数据时使用该会话

于 2013-06-05T09:41:38.143 回答
0

临时解决了在控制器中添加另一条线的问题。不确定它是否安全

def create
@text = Microblog.new(params[:text])
@text.update_attributes(params[@text.locale = "#{I18n.locale}" ])
于 2013-06-05T10:19:39.023 回答