【问题标题】:How to send additional variable with rails form?如何使用 rails 形式发送附加变量?
【发布时间】:2013-06-05 09:36:36
【问题描述】:

我正在使用 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 %>

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

【问题讨论】:

    标签: ruby-on-rails ruby forms


    【解决方案1】:

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

    【讨论】:

    • 临时解决了这个在控制器上添加另一行def create @text = Microblog.new(params[:text]) @text.update_attributes(params[@text.locale = "#{I18n.locale}" ])
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • &lt;%= form_for(:text, :url =&gt; {:action =&gt; 'create', :locale =&gt; I18n.locale} ) do |f| %&gt; 没有用。我的语言环境值为零。
    【解决方案3】:

    希望这个 railscast 会有所帮助,

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

    【讨论】:

      【解决方案4】:

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

      def create
      @text = Microblog.new(params[:text])
      @text.update_attributes(params[@text.locale = "#{I18n.locale}" ])
      

      【讨论】:

        猜你喜欢
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多