导轨3.2打造了在每一个页面的页脚使用的形式(Rails 3.2 create a form tha

2019-07-21 20:24发布

我想打造了用于注册在我的网页页脚邮件列表的形式。 我所做的就是创建一个局部呈现的应用程序布局的页脚这个小表格。

下面是部分的代码:

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

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

  <div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name %>
  </div>
  <div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我还在学习轨所以这从脚手架生成的代码。 从我所收集我需要实例与@mailing_list = MailingList.new但这里的问题是,在邮件列表控制器新的动作不会被调用,因为我不必访问该页面的@mailing_list变量。 这种形式是在每一页的页脚。

什么是创建这个表单的正确方法? 有没有办法做到这一点,而不在每个控制器调用MailingList.new?

谢谢!

Answer 1:

改变你的形式,这

<%= form_for MailingList.new, html: { remote: true } do |f| %>

所以你不必担心实例变量。 你也应该通过remote: true如此的形式通过AJAX提交。 要显示错误,创建一个名为create.js.erbapp/views/mailing_lists并添加(表单之前追加错误只是一个简单的脚本)以下

$('.error-messages').remove();
<% if @mailist_list.errors.any? %>
  $('#new_mailing_list').before('<ul class="error-messages"></ul>');
  <%= @mailing_list.errors.full_messages.each do |msg| %>
    $('.error-messages').append('<li><%= escape_javascript msg %></li>');  
  <% end %>
<% end %>


Answer 2:

你可以改变你form_for方法如下:

<%= form_for :mailing_list, url: mailing_lists_path do |f| %>

然后,你不再需要初始化@mailing_list的每一页。

需要提醒的是,你无法呈现在页脚中的错误。 您将需要创建一个new.html.erb如果在创建节约行动的时候有任何错误使用的代码在这个问题的观点,可以呈现。



文章来源: Rails 3.2 create a form that's used in the footer of every page