Rails:两个独立的创建形式......如何将它们分开?

时间:2011-12-23 12:39:28

标签: ruby-on-rails-3 internationalization

在Rails 3.0中,我有标准的“新”形式,可以创建一个新记录,在这种情况下是一个病人。它工作正常,验证/错误显示也可以正常工作。

客户现在想要西班牙语表格。

所以,我这样做了:

  1. 创建了一个名为“newspanish”的新html文档(剪切/粘贴代码来自“patient / new”)
  2. 创建了一个名为“_form_newspanish”的新部分,并引用了“form”部分位于“newspanish”的地方(剪切/粘贴视图中的代码“patients / _form”)
    1. 在名为“newspanish”的“病人”中创建了一个控制器操作,并从“新”操作中剪切/粘贴了确切的代码。
    2. 我没有触及“创造”行动。
  3. 在路线上添加了匹配的“病人/新闻报道”。
  4. 将英语部分翻译成西班牙语中的views / newspanish和views / _form_newspanish。只是用户在页面上阅读的内容,当然......不是rails代码。
  5. 并且,它可以完美提交。

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

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

    关于如何在错误验证绊倒时加载患者/新闻视图的任何想法?

    这是“_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
    

1 个答案:

答案 0 :(得分: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中检测#create如何判断其是否为西班牙语,并呈现“newspanish”

OR

2)更改<%= form_for(@patient) do |f| %>以提交一个刚刚处理西班牙语版本的新网址,并创建一个新的控制器或操作,只处理西班牙语形式(如果@patient没有,则呈现“newspanish”保存

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

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

并在您的路线中创建

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

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