【问题标题】:Rails: Two separate create forms..how to keep them separate?Rails:两个单独的创建表单..如何使它们分开?
【发布时间】:2011-12-23 12:39:27
【问题描述】:

在 Rails 3.0 中,我有创建新记录的标准“新”表单,在本例中为患者。它工作正常,验证/错误显示也工作正常。

客户现在需要西班牙语的表单。

所以,我这样做了:

  1. 创建了一个名为“newspanish”的新 html 文档(从“患者/新”中剪切/粘贴代码)
  2. 创建了一个名为“_form_newspanish”的新部分,并在“form”部分位于“newspanish”中的位置引用它(从“患者/_form”视图剪切/粘贴代码)
    1. 在“患者”中创建了一个名为“newspanish”的控制器操作,并从“新”操作中剪切/粘贴了准确的代码。
    2. 我没有修改“创建”操作。
  3. 为路线添加了匹配“患者/新闻西班牙语”。
  4. 将views/newspanish 和views/_form_newspanish 中的英文部分翻译成西班牙语。只是用户在页面上阅读的内容,当然……不是 rails 代码。

而且,它适用于完美的提交。

对于未通过验证的提交(例如将 3 位数字作为电话号码),页面将返回到“患者/新”视图并在表单上方显示错误...当然是英文,因为患者/ new 是英文的。

当然,我希望它恢复为“views/newspanish”,并在验证错误中显示自定义措辞(西班牙语)。

关于如何在错误验证失败时加载患者/新闻西班牙语视图有什么想法吗?

这是我的“_form_newspanish”代码

<%= form_for(@patient) do |f| %>

<% if @patient.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@patient.errors.count, "error") %> prohibited this subscriber from     being saved:</h2>

      <ul>
      <% @patient.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>


  <p><label for="mobile">Número de teléfono celular o  móvil*</label>: <%= f.text_field :mobile %></p>
  <br />
    <%= f.submit "Inscribirme" %>
  </div>
<% end %>

和控制器...患者/新闻西班牙语

  def newspanish
    @patient = Patient.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @patient }
    end
  end

【问题讨论】:

标签: ruby-on-rails-3 internationalization


【解决方案1】:
<%= form_for(@patient) do |f| %>

正在创建一个表单,其 url 被提交到是“/patients”,它与 patients_controller 匹配,创建操作。

那个创建动作可能有一行说(在我的伪代码中)

if @patient.save
 redirect to somewhere
else
 render :new
end

“render :new”这一行正在显示“患者/新”视图。

所以你必须弄清楚的是 1) 在 patients_controller 中检测 # 创建如何判断其是否为西班牙语,并呈现“newspanish”

2) 更改&lt;%= form_for(@patient) do |f| %&gt; 以提交仅处理西班牙语版本的新网址,并创建仅处理西班牙语表单的新控制器或操作(如果@patient 不保存,则呈现“newspanish”

对于#2,您可以手动更改表单提交到的位置

<%= form_for(@patient), :url => spanish_patients_path do |f| %>

并在您的路线中创建

post "patients/spanish" => "patients#create_in_spanish"

并将def create_in_spanish 添加到您的患者控制器

【讨论】:

  • 这太棒了..谢谢!只是为了存档,我使用了上面的 if/else/end..and 在 else 中,我让 Rails 检测用户是否在“西班牙语”流中......然后呈现“新”或“新闻西班牙语” .谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2021-10-28
  • 1970-01-01
  • 2014-07-21
  • 2017-06-10
相关资源
最近更新 更多